2016-07-22 52 views
2

我有對象的數組,每個人看起來是這樣的結構:Jstree:無法讀取未定義的屬性子項。定時問題?

var data = [{ 
"code" : "i1", 
"name" : "Industry 1", 
"parentCode" : "i0" 
}, 
{ 
//and more items just like that one 
}]; 

所以我用jstree建立一個層次視圖。由於jstree需要idtext,我的data陣圖是這樣的:

datatree = $.map(data, function (item) { 

     return { 
      id : item.code, 
      text : item.name, 
      parent : item.parentCode 

     }; 

    }); 

然後我初始化我hierarchy格內的實際樹:

$('#hierarchy').jstree({ 

    "core": { 
     "themes": { 
      "variant": "large" 
     }, 
     "data": datatree, 
    }, 
    'check_callback': true, 
    "checkbox": { 
     "keep_selected_style": false 
    }, 
    "plugins": ["wholerow", "search", "unique"] 
}); 

此構建樹和工作正常時,原始數組非常簡單,可能有一兩級深度的親子關係。但是,如果我用另一種陣列構建完全相同的方式,但5級parentages的測試,控制檯拋出一個錯誤:

Uncaught TypeError: Cannot read property 'children' of undefined 

而且它指向這個行中的jstree原代碼:

k[c[o].parent.toString()].children.push(c[o].id.toString()), 

我懷疑它是一個時間問題,因爲jstree無法構建子數組,因爲仍有待加載的項目。但是我的假設可能是錯誤的。

怎麼會這樣,該代碼完全適用於簡單parentages陣列,但是當有多個父級別它打破?這只是我猜測的時機,還是可能存在更深層次的問題?

我已閱讀this question,但似乎用戶最初使用AJAX工作,並解決聲明一個局部對象的問題。礦井已經是本地的,在某些情況下它確實有效,所以我不確定發生了什麼。

+0

如果您重現(SO上或者在這裏可運行的代碼段)在的jsfiddle錯誤是最好的。有一個夾具來調試是必要的,以幫助你在這裏。 – Tomalak

+0

你可以發佈一個不起作用的多級源數組的例子嗎? –

回答

4

該錯誤與我發生時,在你的代碼:

{ 
    id : item.code, 
    text : item.name, 
    parent : item.parentCode 
}; 

「父」 有指向unexisting ID的ID。如果一個項目沒有父項,則需要父項「#」。
所以:

  • 與父母null或undefined檢查項目;
  • 與父母檢查項目沒有相應的父
+1

謝謝你節省我的一天:) – Khateeb321

相關問題