Javascript 在视图之前加载Extjs存储
我有这样一种观点:Javascript 在视图之前加载Extjs存储,javascript,model-view-controller,extjs,constructor,store,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;
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
函数起作用了?在处理存储时(通常在进行ajax调用时)应该使用回调。在您的情况下,应该在存储完成加载时创建视图(使用load
事件并让回调创建视图),或者创建一个adminPanelEnabled()
方法,该方法由存储的load
事件调用
这两个变体有一个共同点,它们在存储完成加载时执行
另外:如果您只需要一次,您可以将事件注册为某种单例事件
store.on('load', function(/*see api for ful arg list*/) {}, scope, { single:true })
好的,谢谢你@seba,感谢我在constructor中提出的想法
applicationName.getApplication().on('allStoresLoaded', function() {
console.log(Ext.getStore('Userrights').findExact("name", "admin_panel_access"))
});
现在它可以工作了:正如你所说,你需要等待。在加载存储之前不要创建视图。加载存储区,等待回调,然后加载视图。autoShow:真的是这种情况的罪魁祸首吗?不,以前调用过initComponent。在创建视图之前,您需要等待sote完成加载。在您的示例中,您可能不会显示
autoShow
,也不会显示您最终创建视图的时间。感谢您在所有商店完成加载后我创建的应用程序事件中提出的想法。在app.js(Sencha ExtJS MVC)中,我使用了。。。store.on('load',function(){Ext.application(....});你能帮我理解你做了什么吗?我在代码中实现了同样的事情,但我不太明白你是如何创建if/then语句来切换配置的,或者这个app.getApplication()在哪里.on handler调用?这很简单,应用程序名就是您创建的应用程序,比如store,或者不知道是什么。它就是您正在运行的应用程序。get store on It获取一个存储并在事件上添加一个操作,该操作稍后会正确处理。