2015-12-10 2 views
1

добавлять узлы к моему дереву, я использую яваскрипта толчок:JsTree: - Почему jsTree удаляет мою собственность?

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); 

Как вы можете видеть, я в том числе дополнительных данных в свойстве «данных» в обоих родителей и ребенка.

Я нахожу, однако, когда я выбираю узел, то child1 вар в коде ниже не определено .... поэтому, так или иначе, 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; 
     } 
} 

Может кто-нибудь Помогите? Это только швы, которые будут происходить при выборе ребенка ребенка.

+0

Если я использую другое имя свойства, кроме "данных" в дочерний объект, т. е. objdata, свойства швов, которые нужно сохранить ... может кто-то сказать мне, почему «данные» сохраняются для корневых элементов, но не для детей? –

+0

Странно, я помню, что сталкивался с той же проблемой, хотя я не могу вспомнить, как я ее исправил. Когда у меня есть аналогичное (не совсем то же) детальное определение, оно отлично работает для меня. –

ответ

0

Вам необходимо получить доступ к объекту item.node.data. Также исправьте child1 до Child1 для родителя узла Child2.

Ваш код может выглядеть следующим образом: console.log('item selected %o', item.node.data);

См скрипку: JS Fiddle

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; 
     } 
} 
Смежные вопросы