2012-04-23 6 views
6

In einer Baumstruktur wie dieseWie füge ich ein Kind zu einem Knoten in einem TreePanel hinzu?

var rootNode = { 
       id: 'root', 
       text : 'Root Node', 
    expanded : true, 
    children : [ 
    { 
     id : 'c1', 
     text : 'Child 1', 
     leaf : true 
    }, 
    { 
     id : 'c2', 
     text : 'Child 2', 
     leaf : true 
    }, 
    { 
     id : 'c3', 
     text : 'Child 3', 
     children : [ 
     { 
      id : 'gc1', 
      text : 'Grand Child', 
      children : [ 
      { 
       id : 'gc11', 
       text : 'Grand Child 1', 
       leaf : true 
      }, 
      { 
       id : 'gc12', 
       text : 'Grand Child 2', 
       leaf : true 
      } 
      ] 
     } 
     ] 
    } 
    ] 
}; 

var tree = new Ext.tree.TreePanel({ 
    id: 'treePanel', 
    autoscroll: true, 
    root: rootNode 
}); 

Wie kann ich einen untergeordneten Knoten eines Knotens (sagen ‚Enkel‘) hinzufügen?

Ich kann auf das Kind zugreifen, indem ich die Wurzel des Trepanel traversiere, aber ich console.logged es in Firebug, es hat keine Funktionen. Sorry für den unformatierten Code, den ich nicht formatieren konnte.

Tree Panel

+0

Um tatsächlich verfügbare Funktionen in Firebug zu sehen, installieren Sie Illuminations for Developers - ein Firebug Plugin. Extrem hilfreich für die ExtJS-Entwicklung. – dbrin

+0

ich habe das :) – Shashwat

Antwort

13

Tun Sie etwas wie folgt aus:

var treeNode = tree.getRootNode(); 
treeNode.expandChildren(true); // Optional: To see what happens 
treeNode.appendChild({ 
     id: 'c4', 
     text: 'Child 4', 
     leaf: true 
}); 
treeNode.getChildAt(2).getChildAt(0).appendChild({ 
     id: 'gc13', 
     text: 'Grand Child 3', 
     leaf: true 
}); 

Wenn das, was Sie brauchen, überprüfen NodeInterface Klasse. Es hat viele nützliche Methoden: http://docs.sencha.com/ext-js/4-0/#!/api/Ext.data.NodeInterface

+0

es hat funktioniert! Gibt es da einen Unterschied zwischen tree.root und tree.getRootNode()? – Shashwat

+0

'root' config ist für, wenn Sie nicht wollen, speichern Sie und speichern Sie Ihre Stammdaten in diese Konfiguration (wie Ihr Code oben). Danach können Sie Ihre Stammdaten zur Laufzeit mit der Methode getRootNode() zurückgeben. Lesen Sie root 'config' und getRootNode() 'method' sorgfältig unter dem obigen Link. – Natasha

0

Es kann ein älterer Thread sein, aber ich hatte ein Problem, wo ich ein Kind zum ausgewählten Knoten hinzugefügt. Ich wollte das neue Kind anzeigen, indem ich den ausgewählten Knoten expandiere und dies fehlgeschlagen ist.

Der Grund: der ausgewählte Knoten, an den ich ein Kind angehängt hatte, hatte die Eigenschaft 'leaf' auf 'true' gesetzt. Das war richtig. Aber aufgrund des Append war das nicht mehr wahr. Und deshalb weigert sich Ext offensichtlich, den Knoten zu erweitern ...

Also Vorsicht: Wenn Sie einen Knoten zu einem anderen Knoten hinzufügen, stellen Sie sicher, dass Sie die 'Blatt' Eigenschaft des parentNode auf 'falsch':

var newNode = Ext.create('some.model.TreeModel', savedNode); 
newNode.set('parentId', record.parentLocationId); 
selectedNode.set('leaf', false); 
selectedNode.appendChild(newNode); 
selectedNode.expand(); 
treeView.getSelectionModel().select(newNode);