ExtJS在启动时展开并选择

时间:2013-10-16 08:47:57

标签: json extjs extjs4 extjs4.1 extjs4.2

我在ExtJS中需要一些解决方案。我有树存储:

Ext.onReady(function(){

    var storeTree = Ext.create('Ext.data.TreeStore', {
    autoLoad:false,
    expanded: false,    
    proxy: {
        type: 'ajax',
        url: 'getOneLevelChilds',
    },

    root: {
        text: 'Ext JS',
        id: 'src',
        expanded: true,
        children:[]
    },
    ...
    ]
});

当我的树首次加载 时,我加载最后所选的子项(例如昨天我打开树并选择一个。我在数据库中保存了它的JSON。所以现在扩展我的树)

storeTree.load({
    url: 'getLastSelectedChild'
});

好的,一切正常!但现在我需要一些解决方案。

当我在启动时加载我的树(当它被加载时)我有JSON:

[
    {"id":3, "text":"first",},
    {"id":4, "text":"second",},
    {
    id:"0", text: "third", expanded: true, children: 
                [
                    {
                        id:"1", text: "child1", leaf: true
                    },
                    {
                        id:"2", text: "child2", leaf: true
                    }
                ] 

    },

]

但我也在数据库中保存选定的节点ID。我知道 id =“2”是在昨天选择的。如何在启动时自动选择该节点? (仅在启动时,仅在加载我的树时)。我怎么能这样做?

当我在树商店中使用代理时,选择不是这样的:

 var record = this.getStore().getNodeById('1');
 this.getSelectionModel().select(record)

但当我不使用代理时工作

而且,我只需要在sturtup上进行选择

1 个答案:

答案 0 :(得分:3)

假设“仅在启动时”表示存储的第一个加载事件,并且您实际上有一个树面板(否则您无法选择节点):

treeStore.on({
    'load': function(store) {
        var node = store.getNodeById(2); // your id here

        treePanel.getSelectionModel().select([node]);

        // alternatively, if also want to expand the path to the node
        treePanel.selectPath(node.getPath());
    },
    single: true
});