extjs - 应用程序启动时不应加载具有自动加载功能的存储

Lor*_*yer 8 extjs extjs4 extjs-stores extjs4.2

我有一个链接到商店的网格autoLoad: true.问题是商店在应用程序启动时加载,即使稍后在通过菜单访问时创建视图也是如此.

我在Application.js和视图中引用了商店,但我没有明确地对商店和视图进行实例化.

我不知道如何实现只在视图需要时才加载存储.

  • 如果我设置autoLoad: true,商店将在应用程序启动时加载.
  • 如果我设置autoLoad: false,商店根本没有加载.

我知道这是非常基本的,但我到目前为止都陷入困境.


以下是所有相关的参考代码:
app/store/Owners.js

Ext.define('Mb.store.Owners', {
    extend: 'Ext.data.Store',
    model: 'Mb.model.Owner',
    autoLoad: true,
    proxy: {
        ...
});
Run Code Online (Sandbox Code Playgroud)

的application.js

Ext.define('Mb.Application', {
    name: 'Mb',
    extend: 'Ext.app.Application',
    models: [
        'Owner'
    ],
    stores: [
        'Owners'
    ],
    ...
Run Code Online (Sandbox Code Playgroud)

应用程序/视图/ Owners.js

Ext.define('Mb.view.winbiz.Owners', {
    extend: 'Ext.grid.Panel',
    alias: 'widget.test-gridPanel',
    store: 'winbiz.Owners',
    columns: [{
    ...
Run Code Online (Sandbox Code Playgroud)

视图在控制器中实例化:

Ext.define('Mb.controller.Winbiz', {
    extend: 'Ext.app.Controller',
    views: [
        'Owners'
    ],
    init: function(){
        this.control({
            'menu #test': {click: this.onMenuTest},
        })
    },
    onMenuTest: function(){
        this.getController('Main').addToMainTab('test-gridPanel');
    },
Run Code Online (Sandbox Code Playgroud)

Krz*_*tof 7

您可以添加render处理程序以查看将调用存储load方法和禁用的处理程序autoLoad.

示例监听器:

Ext.define('Mb.view.winbiz.Owners', {
    extend: 'Ext.grid.Panel',
    [...],

    initComponent: function(){
        this.callParent();
        this.on('render', this.loadStore, this);
    },

    loadStore: function() {
        this.getStore().load();
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 我不喜欢视图中的代码.如果您的代码应该是视图中控制器的责任,则没有理由使用控制器.此解决方案还会在视图的每个渲染上重新加载存储 - 可能不必要? (4认同)