在ViewController中获取商店

Bra*_*sen 1 javascript extjs viewcontroller

是否有可能从一个ViewController?我正在尝试使用商店中的按钮动态填充工具栏,但我不确定如何从控制器访问商店.任何提示赞赏.我的Extjs版本是5.1.

视图:

Ext.define('EurocampingsCMS.view.Foo', {
    extend: 'Ext.toolbar.Toolbar',
    alias: 'widget.foo',
    requires: [
        'EurocampingsCMS.controller.Foo'
    ],
    controller: 'foo',
});
Run Code Online (Sandbox Code Playgroud)

视图控制器:

Ext.define('MyApp.controller.Foo', {
    extend: 'Ext.app.ViewController',
    alias: 'controller.foo',

    control: {
        '#': {
            beforerender: 'onBeforeRender'
        }
    },

    onBeforeRender: function (toolbar, eOpts) {

        //How to get store here??

        store.each(function (record) {
            toolbar.add({
                xtype: 'button',
                itemId: record.get('localeId'),
                text: record.get('label')
            });
        });
    }
});
Run Code Online (Sandbox Code Playgroud)

Sak*_*aki 8

最好的方法是充分利用MVVM架构并在viewmodel stores对象中定义存储.然后很容易:

onBeforeRender: function (toolbar, eOpts) {
    var store = this.getViewModel().getStore('yourstorekey');
}
Run Code Online (Sandbox Code Playgroud)

注意:仅当商店的生命周期与视图的生命周期相同时,才可以执行此操作.如果您需要访问具有更长生命周期的全局存储,则为其分配storeId并获取它:

var store = Ext.getStore('theStoreId');
Run Code Online (Sandbox Code Playgroud)