ExtJS4: передача параметров / свойств из Treestore в контроллер - PullRequest
0 голосов
/ 31 января 2012

Я использую простой TreeStore без прокси для создания моего меню.Вот простой пример:

Store:

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

В контроллере я добавил слушателя к событию "click":

Контроллер:

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".Но это не очень хорошее решение - не так ли?

Так у кого-нибудь есть идея, как передать дополнительные параметры (например, "loadComponent" или "loadTaget") из моего TreeStore в контроллер?

Спасибо заранее и ура, Майкл

1 Ответ

0 голосов
/ 01 февраля 2012

В прошлом я создавал похожее дерево со своими пользовательскими параметрами и использовал собственную модель для своего 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: []        
    }
});
...