2016-07-22 68 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

相关问题