zTree報錯 : Uncaught TypeError: Cannot read property 'init' of undefined


出現這個問題基本上都是$.fn.zTree對象undefined,沒有加載

看網上的說法很多都是父頁面與子頁面,jQuery與zTree相關js的位置問題,但是我這邊是單頁面,所以不是這種原因,繼續尋找。。。

 

 

因為這里是使用了require.js延遲加載,之前寫法如下(只保留了關鍵代碼):

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(),然而並沒有效果;

 

  一直尋找答案,在http://blog.csdn.net/u013026207/article/details/52105966這篇博文里提到jquery與zTree版本沖突,但是我這里是不存在版本沖突的,但是想到zTree是依賴jQuery的,但是require.config里面並沒有,遂加上這段代碼

require.config({
    urlArgs: "date=" + _Config_.date.getDate(),
    paths: _PATH_,
    shim: {
        ...
        "ztree-core":{
            deps: ["jquery"],    //此處必須依賴jquery,不加的話$.fn.zTree對象經常無法加載
            exports:"_"
        },
        "ztree-exedit":{
            deps: ["jquery"],
            exports:"_"
        },
        ...
    }
});

  ok!不再報錯

 

  總結:出現這個問題還是因為使用了require.js延遲加載zTree相關js,但沒有指定依賴,所以這個問題不一定很具有代表性,因為是接手的代碼,也不知道開發者為什么這么寫;這邊先記錄下來,以后用到require.js的時候記得不要再犯同樣的錯誤


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM