如何在存储加载后获取子节点

时间:2012-10-19 09:15:22

标签: extjs tree load store extjs4.1

版本:ExtJs 4.1

要更改子项目,我使用此功能:

TreeStore (Ext.data.TreeStore)

storeId  : 'treeStore',
...
constructor: function( oConfig ) {
...
this.on( 'expand', function( oObj ) {           
        oObj.eachChild(function(oNode) {
           switch(oNode.data.type) {
              case "report":
                 oNode.set('icon', strIconReport);
              break;
              case "view":
                 oNode.set('icon', strIconView);
              break;
           }
        });
     });

刷新

在树中删除或添加项目后,我使用以下地址重新加载树:

var oStore = Ext.getStore('treeStore');
oStore.load({
        node     : oNode,
        params   : { 
           newpath     : oNode.data.path, 
           overwrite   : true
        }
     }); 

虽然它是同一个商店treeStore,但在加载并扩展到正确的路径后,由于未调用.on( 'expand')函数,因此图标不会更改。为什么呢?

问题

如何在扩展到节点路径之前更改此新加载的商店的图标?

我尝试了什么

在致电.load()之前,我尝试使用oNode.eachChild(function(oChild) {}编辑孩子,但没有成功。

1 个答案:

答案 0 :(得分:1)

我想出了解决方案,这真的很容易。我不再更改expand,而是更改load

因此它会在扩展和加载时更改图标:

this.on( 'load', function( oStore, oNode, oNodes ) { 
  // do something with the nodes 
}