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 需要 idtext,我映射 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
  • 的项目