2016-07-22 10 views
2

Ich habe ein Array von Objekten, wobei jedes von ihnen wie diese Struktur aussehen:Jstree: Kann nicht lesen Eigenschaft Kinder von undefined. Timing-Problem?

var data = [{ 
"code" : "i1", 
"name" : "Industry 1", 
"parentCode" : "i0" 
}, 
{ 
//and more items just like that one 
}]; 

so dass ich jstree bin mit einer Hierarchieansicht zu bauen. Da jstreeid und text braucht, Karte ich die data Array wie folgt:

datatree = $.map(data, function (item) { 

     return { 
      id : item.code, 
      text : item.name, 
      parent : item.parentCode 

     }; 

    }); 

Und dann initialisieren ich den eigentlichen Baum in meinem hierarchy div:

$('#hierarchy').jstree({ 

    "core": { 
     "themes": { 
      "variant": "large" 
     }, 
     "data": datatree, 
    }, 
    'check_callback': true, 
    "checkbox": { 
     "keep_selected_style": false 
    }, 
    "plugins": ["wholerow", "search", "unique"] 
}); 

Dieser den Baum baut und funktioniert gut, wenn die Original Array ist ziemlich einfach, vielleicht ein oder zwei Ebenen tief der Elternschaft. wenn ich mit einem alternativen Array Build jedoch teste genau die gleiche Weise, aber mit 5 Stufen parentages, wirft die Konsole einen Fehler:

Uncaught TypeError: Cannot read property 'children' of undefined 

Und es zeigt auf diese Zeile in dem jstree Original-Code:

k[c[o].parent.toString()].children.push(c[o].id.toString()), 

Ich habe den Verdacht, dass es ein Timing-Problem ist, wie in jstree nicht in der Lage, das Children-Array zu erstellen, da noch ausstehende Elemente geladen werden müssen. Aber ich könnte mich in meiner Annahme irren.

Wie kann es sein, dass der Code perfekt für Arrays mit einfachen Elternteilen funktioniert, aber es bricht, wenn es mehrere Elternebenen gibt? Ist es nur Timing, wie ich denke, oder es könnte tiefere Probleme geben?

Ich habe gelesen this question, aber es scheint, dass der Benutzer zunächst mit AJAX arbeitete und löste das Problem, ein lokales Objekt zu deklarieren. Meins ist bereits lokal und es funktioniert in einigen Fällen, so dass ich nicht sicher bin, was vor sich geht.

+0

ist es am besten, wenn Sie die Fehler in einem jsFiddle (oder in einem runnable Schnipsel hier auf SO) reproduzieren. Um hier Abhilfe zu schaffen, ist es notwendig, ein Gerät zu haben, gegen das man debuggen kann. – Tomalak

+0

Können Sie ein Beispiel für ein mehrstufiges Quell-Array veröffentlichen, das nicht funktioniert? –

Antwort

4

Dieser Fehler passiert mit mir, wenn in Ihrem Code:

{ 
    id : item.code, 
    text : item.name, 
    parent : item.parentCode 
}; 

"Eltern" haben eine ID zu einer unexisting ID zeigen. Wenn ein Element keinen Elternteil hat, muss es Eltern "#" haben. So
:

  • Prüfpunkte mit Mutter null oder nicht definiert;
  • Prüfpunkte mit Eltern ohne Eltern entsprechenden
+1

Vielen Dank für die Rettung meines Tages :) – Khateeb321