1

我有这样的看法:

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功能启动?

4

2 回答 2

2

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

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

另外:如果你只需要这个,你可以将事件注册为单例

store.on('load', function(/*see api for ful arg list*/) {}, scope, { single:true })
于 2013-10-07T11:35:33.407 回答
0

好的,谢谢@seba 我在consructor中创建的想法

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

    });

它现在可以工作了:D

于 2013-10-07T11:53:40.573 回答