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

相關文章
相關標籤/搜索