我正在使用Ext.js尝试用商店填充手风琴面板。
以下是一段代码:
var store = Ext.create('Ext.data.Store', {
model: jobStatusModel,
storeId: jobStatusDescription,
sortOnLoad: true,
proxy: {
type: 'ajax',
url: 'http://server/JobScheduler/Service.svc/JobScheduler/Jobs/' + jobStatusDescription,
reader: {
type: 'json'
}
},
autoLoad: true,
listeners: {
load: fillItemsAndSetPanelTitle
}
});
这嵌入在为每个“作业状态”运行的循环中。
在这个循环之外,我有fillItemsAndSetPanelTitle
函数。
每当我从create store中删除“listeners”时,它运行正常。但除此之外,我得到了错误:
Uncaught TypeError: Cannot read property 'fn' of undefined
知道我在这里做错了吗?
编辑:我发现它抱怨,因为我“手动”调用我的主要功能。
以前,它使用:
this.control({
"#MainMenuPanel": {
render: this.onMainMenuPanelRender
}
});
我想在调用onMainMenuPanelRender
之前等待我的商店加载,但是在等待所有商店加载的函数中添加"this.control"
调用似乎不起作用,所以我称之为“手动”(this.onMainMenuPanelRender())
。
所以我想我现在的问题是:如何在初始“init”函数之外调用"this.control"
?
答案 0 :(得分:0)
为什么要在controller.init之外调用this.control?它只是设置控制器。在其他地方没有意义。我认为你的方向是错误的。
此外,建议使用Ext.define在应用程序加载时定义商店。同时使函数fillItemsAndSetPanelTitle成为控制器的一个成员。我不知道'填写物品'但是,如果您使用网格面板显示商店,网格将在商店加载时自动填充。
我在您的代码中看到的另一个问题是,您在加载商店时,但在创建面板之前设置了面板标题。我认为正确的顺序是:加载商店,获取面板标题,直接使用正确的标题创建面板。
我建议您阅读有关ExtJs中MVC模式的文档。它会让你摆脱许多麻烦。