JsTree: - 为什么jsTree会删除我的财产?

时间:2015-12-10 20:01:12

标签: javascript jstree

将节点添加到我的树中,我正在使用javascript push:

var parent1 =
{
    "id": "parent1",
    "data": {extra:"some extra data"},
    "parent": "#",
    "type": "myType1",
    "text": "I am a parent",
    "state": {"opened": false}
}
nodes.push(parent1);


var child1 =
{
    "id": "Child1",
    "data": {extra:"some extra data"},
    "parent": "parent1",
    "type": "myType2",
    "text": "I am a child",
    "state": {"opened": false}
}
nodes.push(child1);

var child2 =
{
    "id": "Child2",
    "data": {extra:"some extra data"},
    "parent": "child1",
    "type": "myType3",
    "text": "I am child2",
    "state": {"opened": false}
}
nodes.push(child2);

正如您所看到的,我在父级和子级的“data”属性中包含了额外的数据。

然而,我发现,当我选择一个节点时,下面代码中的child1 var是未定义的....因此,不知何故,jsTree正在删除我的数据属性......

var selectNode = function (e, item) {
    console.log('item selected %o', item);
    switch (item.node.type) {
        case "myType3":
          var child = item.node.data,
           child1NodeId = item.node.parent,
           child1Node = _.where(nodes,{id:child1NodeId}),
           child1 = child1NodeId[0].data
           break;
       }
}

有人可以帮忙吗? 这只会在选择孩子的孩子时发生。

2 个答案:

答案 0 :(得分:0)

您需要访问item.node.data属性。另请更正节点child1的父级Child1Child2

您的代码可能如下所示:console.log('item selected %o', item.node.data);

请参阅小提琴:JS Fiddle

答案 1 :(得分:0)

我发现了问题。原因是我试图检索节点。

而不是:

var selectNode = function (e, item) {
console.log('item selected %o', item);
switch (item.node.type) {
    case "myType3":
      var child = item.node.data,
       child1NodeId = item.node.parent,
       child1Node = _.where(nodes,{id:child1NodeId}),
       child1 = child1NodeId[0].data
       break;
   }

}

我应该使用JSTree API“getNode”代替:

var selectNode = function (e, item) {
    console.log('item selected %o', item);
    switch (item.node.type) {
        case "myType3":
          var treeinst = $('#myTree').jstree(true),
           child = item.node.data,
           child1NodeId = item.node.parent,
           child1Node = treeInst.get_node( child1NodeId )
           child1 = child1Node.data
           break;
       }
}