2012-04-23 16 views
6

In una struttura ad albero come questoCome aggiungere un figlio a un nodo in un TreePanel?

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

Come faccio ad aggiungere un nodo figlio di un nodo (dicono 'nipote')?

Posso accedere al bambino attraversando la radice del treepanel, ma lo ho console.loggato in Firebug, non ha alcuna funzione. Siamo spiacenti per il codice non formattato, non ero in grado di formattarlo.

Tree Panel

+0

Per vedere effettivamente la funzione disponibile in Firebug installa Illuminations for Developers - un plug-in Firebug. Estremamente utile per lo sviluppo di ExtJS. – dbrin

+0

ce l'ho :) – Shashwat

risposta

13

fare qualcosa di simile:

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

Se questo è quello che ti serve, prova anche NodeInterface Class. Esso ha molti metodi utili: http://docs.sencha.com/ext-js/4-0/#!/api/Ext.data.NodeInterface

+0

ha funzionato! c'è qualche differenza tra tree.root e tree.getRootNode()? – Shashwat

+0

'root' config è per quando non si desidera memorizzare e hardcodificare i dati di root in tale configurazione (come sopra il proprio codice). Successivamente è possibile restituire i propri dati di root con il metodo getRootNode() in fase di runtime. Leggi root 'config' e getRootNode() 'metodo' attentamente al link sopra. – Natasha

0

può essere un filo più vecchio, ma ho avuto un problema in cui ho aggiunto un bambino per il nodo selezionato. Volevo mostrare il nuovo figlio espandendo il nodo selezionato e tale errore.

Il motivo: il nodo selezionato a cui è stato aggiunto un figlio ha la proprietà "foglia" impostata su true. Era corretto Ma a causa dell'append, questo non era più vero. E a causa di ciò, apparentemente, Ext si rifiuta di espandere il nodo ...

Quindi, attenzione: quando aggiungi un nodo a un altro nodo, assicurati di impostare la proprietà 'leaf' di parentNode su 'false':

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