zTree报错 : Uncaught TypeError: Cannot read property 'init' of undefined

出现这个问题基本上都是$.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

相关文章
相关标签/搜索