ExtJS4:将参数/属性从Treestore传递到Controller

时间:2012-01-31 11:18:54

标签: extjs parameters extjs4 store

我使用一个没有代理的简单TreeStore来构建我的菜单。这是一个简单的例子:

商品

Ext.define('LT.store.MnuApplication', {
    extend: 'Ext.data.TreeStore',
    root: {
        expanded: true,
        children: [{
            text: "Lists", 
            expanded: true, 
            children: [{
                text: "Countries", 
                leaf: true,
            }]
        }]
    }
});

在控制器中我已经为“点击”事件添加了一个监听器:

控制器:

init: function() {

        this.control({

            /**
             * Catch the treepanels in the menu accordion
             */
            'menu-main treepanel': {

                itemclick: function (view, record, item, index, event){

                    var clickedMnuNode = record;
                    var tabPanel = this.getTabPanel();                   

                    // Open tab only if the menu node is a leaf node
                    if (clickedMnuNode.isLeaf()) {
                        tabPanel.add({
                            xtype: clickedMnuNode.raw.loadTabComponent
                        }).show();
                    }
                }
            }
        });

        this.callParent();

    }

现在我对这个解决方案的问题是:我想在TreeStore中定义哪些操作应由控制器完成 - 尤其应该加载哪个组件。

例如,我希望TreeStore看起来像这样:

Ext.define('LT.store.MnuApplication', {
    extend: 'Ext.data.TreeStore',
    root: {
        expanded: true,
        children: [{
            text: "Lists", 
            expanded: true, 
            children: [{
                text: "Countries", 
                leaf: true,
                loadComponent: 'country-list',
                loadTarget: 'tabPanel'
            }]
        }]
    }
});

如您所见,我已向Tree Leaf添加了两个新参数。现在,我可以通过记录的“RAW”方法访问这些数据集。但这不是一个很好的解决方案 - 不是吗?

所以有人对我有所了解,如何将我的TreeStore中的其他参数(如“loadComponent”或“loadTaget”)传递给控制器​​?

提前致谢&干杯, 迈克尔

1 个答案:

答案 0 :(得分:0)

过去我使用自定义参数创建了类似的树,并且我为TreeStore使用了自定义模型。因为默认情况下您的节点只具有NodeInterface的属性。像这样:

Ext.define('TreeConfig.model.Config', {
    extend: 'Ext.data.Model',
    fields: ['properties', 'id', 'text', 'guid'],
    proxy: {
        type: 'ajax',
        url: rootConfigURL,
        actionMethods: 'POST',
        reader: {
            type: 'json'            
        }
    }
});


Ext.define('TreeConfig.store.CurrentConfig', {
    extend: 'Ext.data.TreeStore',
    model: 'TreeConfig.model.Config',
    requires: 'TreeConfig.model.Config',    
    root: {
        text: 'Config root',
        expanded: true,
        properties: []        
    }
});