2012-04-23 32 views
6

在一個樹狀結構這樣如何將子項添加到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 
}); 

如何添加任何節點的子節點(說「孫子」)?

我可以通過遍歷treepanel的根訪問孩子,但我console.logged它在Firebug中,它沒有任何功能。 對不格式化的代碼抱歉,我無法格式化它。

Tree Panel

+0

要實際查看Firebug中的可用功能,請安裝Illuminations for Developers - Firebug插件。對ExtJS開發非常有用。 – dbrin 2012-04-24 02:17:42

+0

我確實有:) – Shashwat 2012-04-27 06:04:39

回答

13

做這樣的事情:

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

如果這是你需要什麼,看看NodeInterface類。它有很多有用的方法: http://docs.sencha.com/ext-js/4-0/#!/api/Ext.data.NodeInterface

+0

它的工作!它有沒有區別tree.root和tree.getRootNode()? – Shashwat 2012-04-24 08:08:11

+0

「root」配置適用於不希望將根數據存儲並硬編碼到該配置中的情況(如上面的代碼)。之後,您可以在運行時使用getRootNode()方法返回您的根數據。在上面的鏈接處仔細閱讀根'config'和getRootNode()'方法'。 – Natasha 2012-04-24 13:21:38

0

它可能是一個較老的線程,但是,我有一個問題,我添加了一個孩子到選定的節點。我想通過展開選定的節點來顯示新的孩子,並且失敗了。

原因:我追加一個孩子的選定節點的屬性'leaf'設置爲true。這是正確的。但由於追加,這不再是事實。顯然,Ext拒絕擴展節點...

所以要小心:當您將節點添加到另一個節點時,請確保將parentNode的'leaf'屬性設置爲'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); 
相關問題