Extjs在视图之前加载存储

时间:2013-10-07 11:20:47

标签: javascript model-view-controller extjs constructor store

我有一个看起来像这样的人:

Ext.define('Webedi.view.zones.Menu', {
    store: 'PartnerSettings',
    extend: 'Ext.panel.Panel',
            .
            .
            .
            .
    adminPanelEnabled: false,
    initComponent: function() {
        var me = this;

console.log(Ext.getStore('Userrights').findExact("name","admin_panel_access"));

          if(Ext.getStore('Userrights').findExact("name","admin_panel_access") !== -1) me.adminPanelEnabled = true;
//        if(Ext.getStore('PartnerSettings').getAt(0).get('purchasingOrganisation').enabled ) me.purchasingOrganisationEnabled = true;
        this.items = [
                    .
                    .
                    .
                    .

                    {
                        id: 'adminpanel',
                        itemId: 'adminpanel',
                        xtype: 'button',
                        text: Translation.ZonesMenuAdminPanel,
                        action: 'adminpanel',
                        margin: '3 3 0 3',
                        hidden: !me.adminPanelEnabled
                    }
                ]
            }
        ];

        this.callParent();
    }
});

问题在于

 if(Ext.getStore('Userrights').findExact("name","admin_panel_access") !== -1)

代码部分运行的时间尚未填写:

 hidden: !me.adminPanelEnabled

initComponent功能开始了吗?

2 个答案:

答案 0 :(得分:2)

在使用商店时(通常在执行ajax调用时),您应该使用回调。在您的情况下,您应该在商店加载完成后创建视图(使用load事件并让回调创建您的视图)或创建adminPanelEnabled()方法,由load调用商店的活动。

两种变体都有一个共同点,它们在商店加载完成后执行。

此外:如果您只需要这个,您可以将事件注册为单身人士

store.on('load', function(/*see api for ful arg list*/) {}, scope, { single:true })

答案 1 :(得分:0)

好的,谢谢@seba我在构造函数中创建的想法

    applicationName.getApplication().on('allStoresLoaded', function() {
        console.log(Ext.getStore('Userrights').findExact("name", "admin_panel_access"))

    });

它现在有效:D