出现这个问题基本上都是$.fn.zTree对象undefined,没有加载jquery
看网上的说法不少都是父页面与子页面,jQuery与zTree相关js的位置问题,可是我这边是单页面,因此不是这种缘由,继续寻找。。。ajax
由于这里是使用了require.js延迟加载,以前写法以下(只保留了关键代码):ui
require.config({ urlArgs: "date=" + _Config_.date.getDate(), paths: _PATH_, shim: { "easyui-core": { deps: ["jquery"], exports: "easyui-core" }, "easyui": { deps: ["easyui-core"], exports: "easyui" }, "ztree-core":{ exports:"_" }, "ztree-exedit":{ exports:"_" }, "ajaxFileupload":{ deps: ["jquery"], exports:"ajaxFileupload" } } }); require(['easyui',"ajaxFileupload","ZeroClipboard","ztree-core","ztree-exedit"], function(ZeroClipboard { var setting = {}; function loadTree(data) { var treeObj = $("#menuTree"); $.fn.zTree.init(treeObj, setting, data); } }
有怀疑是由于延迟加载,致使zTree相关js未加载致使错误,所以使用setTimeout,等待数秒后执行loadTree(),然而并无效果;url
一直寻找答案,在http://blog.csdn.net/u013026207/article/details/52105966这篇博文里提到jquery与zTree版本冲突,可是我这里是不存在版本冲突的,可是想到zTree是依赖jQuery的,可是require.config里面并无,遂加上这段代码spa
require.config({ urlArgs: "date=" + _Config_.date.getDate(), paths: _PATH_, shim: { ... "ztree-core":{ deps: ["jquery"], //此处必须依赖jquery,不加的话$.fn.zTree对象常常没法加载 exports:"_" }, "ztree-exedit":{ deps: ["jquery"], exports:"_" }, ... } });
ok!再也不报错.net
总结:出现这个问题仍是由于使用了require.js延迟加载zTree相关js,但没有指定依赖,因此这个问题不必定很具备表明性,由于是接手的代码,也不知道开发者为何这么写;这边先记录下来,之后用到require.js的时候记得不要再犯一样的错误code