我使用的是Sencha Touch 2.3。我正在尝试以本文中定义的类似方式在控制器中获取Store实例http://www.sencha.com/learn/architecting-your-app-in-ext-js-4-part-3/.
我已经在控制器配置中定义了"位置"存储。然后,我尝试使用两个都失败的方法来获取存储。第一个通过Ext.getStore,第二个通过getLocationStore,它应该是一个自动生成的函数。两者都失败了。第一个调用返回undefined,第二个调用抛出异常,因为函数不可用。
Ext.define('MyApp.controller.Location', {
extend: 'Ext.app.Controller',
config: {
refs: {
locationSearchField: '#locationSearchField'
},
control: {
locationSearchField: {
action: 'onSearchAction'
}
},
stores: [ 'Location' ]
},
onSearchAction: function() {
var locationSearchStore = Ext.getStore('Location');
if (locationSearchStore == undefined) {
Ext.Logger.warn('Could not locate locationSearchStore');
locationSearchStore = this.getLocationStore();
if (locationSearchStore == undefined)
Ext.Logger.warn('Could not location locationSearchStore again!');
else
Ext.Logger.info('Success!');
}
else
Ext.Logger.info('Success!');
}
});
您可以通过以下方式获取您的商店:Ext.data.StoreManager.lookup('Location'
)(如果它被称为MyApp.store.Location
)。
为了确保您在onSearchAction
中处于正确的上下文中,请尝试调用console.dir(this);
并检查this
是否是控制器对象本身
首先,您想访问sencha touch中的store,但您已经给出了extjs的链接。其次,您需要首先定义您的存储,然后将其添加到app.js文件中。然后您可以通过Ext.getStore('Location')
方法访问您的商店。作为参考,你可以学习http://miamicoder.com/2012/sencha-touch-2-stores-adding-removing-and-finding-records/