我正在尝试根据服务器返回的数据动态构建表单。在这种情况下,我的商店没有<PROJECT NAME>/store
文件夹。我在<PROJECT NAME>/store/admin
中有。它的定义如下:
Ext.define('APP.store.admin.TaskOption', {
extend: 'Ext.data.Store',
autoLoad: false,
storeId: 'adminTasksOptions',
model: 'APP.model.admin.TaskOption',
sorters: [
{ property: 'order', direction: 'ASC' }
]
});
请注意storeId
。
现在在我的控制器中,我在init
方法中尝试了这个,但它没有用(即:它没有调用taskOptionsLoaded
方法。
Ext.create('APP.store.admin.TaskOption');
this.getAdminTasksOptionStore().on({
scope: this,
load : this.taskOptionsLoaded
});
另请注意,当我执行断点并检查时,this.getAdminTaskOptionStore
返回了正确的商店。我猜这是发生的,因为我把商店放在子文件夹中?不确定,但不是重新组织文件夹结构并将它们全部放在store
文件夹中(我有大量的商店;大项目),我试图找到一个解决方案,这样我就可以保持文件有条理,这样很容易对于下一个人。
所以现在我尝试了这个,这也不起作用。这是在同一个控制器中的方法中执行的。
Ext.getStore('adminTasksOptions').load(
{'params' : {'t_id' : this.selectedTaskTemplate},
callback: function(store, records, success) {
this.taskOptionsLoaded(store, records, success);
}
},this);
当我在this.taskOptionsLoaded
行上断点时,它位于商店范围内,而不是控制器(this
)范围内。
使用自己的storeId
在商店中添加加载回调的最简洁方法是什么,并在控制器范围内执行方法?
希望这是有道理的。
答案 0 :(得分:1)
如果你的控制器有一个配置stores: ['AdminTasksOptionStore']
,它会生成一个名为getAdminTasksOptionStore()
的getter。
您storeId
为adminTasksOptions
的事实并不意味着ExtJS会在控制器中生成getter;但是,您可以Ext.data.StoreManager.lookup('adminTasksOptions')
。
你需要进入你的控制器:
stores: ['TaskOption'],
然后在您的控制器中,您将拥有getter getTaskOptionStore()
。
关于你的加载范围,你使用的是错误的变量,它应该是:
Ext.getStore('adminTasksOptions').load({
scope: this,
params: {'t_id' : this.selectedTaskTemplate},
callback: function(store, records, success) {
this.taskOptionsLoaded(store, records, success);
}
});
答案 1 :(得分:0)
我认为您使用的on()
功能错误了。试试这个:
this.getAdminTasksOptionStore().on(
'load', // event
this.taskOptionsLoaded, // handler
this // scope
);