我有一个看起来像这样的人:
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
功能开始了吗?
答案 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