【问题标题】:ExtJs 5 grid store/viewmodel binding: Cannot modify ext-empty-storeExtJs 5 网格存储/视图模型绑定:无法修改 ext-empty-store
【发布时间】:2014-11-18 00:23:11
【问题描述】:

我正在把头发拉出来...

我有一个带有一些网格、一个商店和一个 viewModel 的视图。我需要不同网格中商店的不同过滤版本,所以我试图将每个过滤后的商店绑定到一个网格。现在我什至无法让商店首先加载到网格中......

我的代码如下所示:

商店:

Ext.define('My.store.Admin.Kinder', {
    extend: 'Ext.data.Store',
    model: 'My.model.Kind',
    storeId: 'adminKinderStore',
    alias: 'store.adminKinder',
    proxy: {
        type: 'ajax',
        method: 'post',
        url: '/getKinder',
        reader: {
            type: 'json',
            rootProperty: 'kinder'
        }
    }
});

视图模型:

Ext.define('My.model.kindViewModel', {
    extend: 'Ext.app.ViewModel',
    alias: 'viewmodel.kindViewModel',
    requires: [
        'My.model.Kind',
        'My.store.Admin.Kinder'
    ],
    view: 'kindView',
    stores: {
        warteliste: {
            type: 'adminKinder'
        }
    }
});

查看:

Ext.define('My.view.Admin.kinder', {
    extend: 'Ext.panel.Panel',
    alias: 'widget.kindView',
    id: 'kinder-panel',
    requires: [
        'My.view.Admin.kindController',
        'My.model.kindViewModel'
    ],
    controller: 'kind',
    border: false,
    maxWidth: 960,
    session: My.session,
    viewModel: {
        type: 'kindViewModel'    
    },    
    initComponent: function() {
        this.activeTab = 'warteliste-tab';
        this.callParent();
    },
    items: [
    {
        xtype: 'grid',
        id: 'warteliste-grid',
        bind: {
            store: '{warteliste}'
        },              
        border: false,
        margin: '0 0 20px 0',
        selModel: {
            allowDeselect: true
        },
        columns: [
            // some grid columns
        ],
        listeners: {
            afterRender: function(grid) {
                grid.store.load();
            }
        }
    }]
});

我收到一条错误消息“无法修改 ext-empty-store”,这一定意味着当在 afterRender 侦听器中调用 store.load() 时,该存储尚未(尚未)绑定。 奇怪的是,当我 console.log 网格时,商店就在那里。当我 console.log grid.store 时,返回一个空的 store。

【问题讨论】:

    标签: binding viewmodel extjs5


    【解决方案1】:

    我在 afterRender 事件中遇到了同样的问题,并通过不从网格中获取商店来解决它

    grid.store.load();
    

    但来自 ViewModel(ViewController 范围):

    this.getViewModel().getStore('{warteliste}').load();
    

    【讨论】:

    • 它在 getStore 中没有“{}”的情况下工作。 this.getViewModel().getStore('warteliste').load();
    【解决方案2】:

    检查商店是否在视图模型中按预期创建。通常情况下,我们在./store 目录中没有存储定义文件,但我们将它们的配置放在视图模型中。

    在此处查看示例:http://extjs.eu/ext-examples/#bind-grid-form - MainModel::stores

    你原来的问题的解决方案

    我需要不同网格中商店的不同过滤版本

    是连锁店。

    在此处查看如何实现它们的示例:http://extjs.eu/on-chained-stores/

    【讨论】:

    • 问题似乎是加载顺序...如果我使用商店:{ warteliste: { type: 'adminKi​​nder', autoLoad: true } },并跳过 afterRender 函数,它可以工作。连锁店也能正常运作。
    【解决方案3】:

    对我来说是

    myGrid.getViewModel().getStore('myStoreName').load();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-30
      • 2012-05-01
      • 2015-11-23
      • 2014-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多