Jstree:无法读取未定义的 属性 个子项。时间问题?
Jstree: Cannot read property children of undefined. Timing issue?
我有一个对象数组,其中每个对象的结构如下所示:
var data = [{
"code" : "i1",
"name" : "Industry 1",
"parentCode" : "i0"
},
{
//and more items just like that one
}];
所以我正在使用 jstree
构建层次结构视图。由于 jstree
需要 id
和 text
,我映射 data
数组如下:
datatree = $.map(data, function (item) {
return {
id : item.code,
text : item.name,
parent : item.parentCode
};
});
然后我在 hierarchy
div:
中初始化实际的树
$('#hierarchy').jstree({
"core": {
"themes": {
"variant": "large"
},
"data": datatree,
},
'check_callback': true,
"checkbox": {
"keep_selected_style": false
},
"plugins": ["wholerow", "search", "unique"]
});
当原始数组非常简单时,这构建了树并且工作正常,可能有一个或两个级别的父级深度。但是,如果我使用完全相同的方式构建替代数组进行测试,但具有 5 个级别的父级,则控制台会抛出错误:
Uncaught TypeError: Cannot read property 'children' of undefined
它指向 jstree
原始代码中的这一行:
k[c[o].parent.toString()].children.push(c[o].id.toString()),
我怀疑这是一个时间问题,例如 jstree
无法构建子数组,因为仍有待加载的项目。但我的假设可能是错误的。
为什么代码对于具有简单父级的数组可以完美地工作,但是当有多个父级时它会中断?是我猜的时间问题,还是有更深层次的问题?
我已阅读 this question,但似乎用户最初使用 AJAX 并解决了声明本地对象的问题。我的已经是本地的,在某些情况下它确实可以工作,所以我不确定发生了什么。
当我在你的代码中出现这个错误时:
{
id : item.code,
text : item.name,
parent : item.parentCode
};
您的 parent 的 ID 为 non-existent 项。
parent 键必须存在,并且不接受 false、null、0 或不在数据列表中的 id。如果某项没有 parent,则 parent 需要为“#”,即 "parent": "#"
.
所以:
- 检查 parent 为空或未定义的项目;
- 检查 parent 没有对应 parent
的项目
我有一个对象数组,其中每个对象的结构如下所示:
var data = [{
"code" : "i1",
"name" : "Industry 1",
"parentCode" : "i0"
},
{
//and more items just like that one
}];
所以我正在使用 jstree
构建层次结构视图。由于 jstree
需要 id
和 text
,我映射 data
数组如下:
datatree = $.map(data, function (item) {
return {
id : item.code,
text : item.name,
parent : item.parentCode
};
});
然后我在 hierarchy
div:
$('#hierarchy').jstree({
"core": {
"themes": {
"variant": "large"
},
"data": datatree,
},
'check_callback': true,
"checkbox": {
"keep_selected_style": false
},
"plugins": ["wholerow", "search", "unique"]
});
当原始数组非常简单时,这构建了树并且工作正常,可能有一个或两个级别的父级深度。但是,如果我使用完全相同的方式构建替代数组进行测试,但具有 5 个级别的父级,则控制台会抛出错误:
Uncaught TypeError: Cannot read property 'children' of undefined
它指向 jstree
原始代码中的这一行:
k[c[o].parent.toString()].children.push(c[o].id.toString()),
我怀疑这是一个时间问题,例如 jstree
无法构建子数组,因为仍有待加载的项目。但我的假设可能是错误的。
为什么代码对于具有简单父级的数组可以完美地工作,但是当有多个父级时它会中断?是我猜的时间问题,还是有更深层次的问题?
我已阅读 this question,但似乎用户最初使用 AJAX 并解决了声明本地对象的问题。我的已经是本地的,在某些情况下它确实可以工作,所以我不确定发生了什么。
当我在你的代码中出现这个错误时:
{
id : item.code,
text : item.name,
parent : item.parentCode
};
您的 parent 的 ID 为 non-existent 项。
parent 键必须存在,并且不接受 false、null、0 或不在数据列表中的 id。如果某项没有 parent,则 parent 需要为“#”,即 "parent": "#"
.
所以:
- 检查 parent 为空或未定义的项目;
- 检查 parent 没有对应 parent 的项目