无法获取Sencha控制器内的存储



我使用的是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/

最新更新