Extjs 为什么';是否加载ViewModel中声明的存储?

Extjs 为什么';是否加载ViewModel中声明的存储?,extjs,mvvm,extjs6,extjs-stores,Extjs,Mvvm,Extjs6,Extjs Stores,这个问题与我们有关,但又是一个不同的问题 我在viewmodel中声明一个存储,如下所示: Ext.define('Mb.view.rma.DetailsModel', { extend: 'Ext.app.ViewModel', alias: 'viewmodel.rma-details', requires: ['Mb.model.rma.Detail'], data: { id: 0 }, stores:{ d

这个问题与我们有关,但又是一个不同的问题

我在viewmodel中声明一个存储,如下所示:

Ext.define('Mb.view.rma.DetailsModel', {
    extend: 'Ext.app.ViewModel',
    alias: 'viewmodel.rma-details',
    requires: ['Mb.model.rma.Detail'],
    data: {
        id: 0
    },
    stores:{
        details: {
            //store: 'rma.Details',
            type: 'rmaDetails', // correction as suggested by @scebotari
            filters: [{
                property: 'rma',
                value: '{id}'
            }],
            remoteFilter: true
        }
    }
});
当我实例化视图时,值
id
在viewmodel中正确更新(我可以看到这一点,因为视图通过绑定的标题反映它):

我面临的问题是,即使viewmodel中存在
remoteFilter:true
属性,也无法加载存储(在存储类而不是viewmodel中设置
remoteFilter:true
不会更改行为)

要完成代码,这里是商店(没有什么特别的):

主要问题:为什么商店没有加载?

附属问题:例如,显示发票行这样的明细网格似乎是一个常见问题。我不确定我正在尝试的是否是使用MVVM解决此问题的推荐方法。MVVM似乎比MVC好,因为它可以一次打开多个details实例。我没有找到这个案例的例子。有没有解决这个问题的推荐方法

注:

过滤器按其应该的方式应用


商店
{details}
似乎不是连锁商店。事实上,当在viewmodel中将
store:'rma.Details'
更改为
source:'rma.Details'
时,它变成了一个链式存储。

据我所知,这不是使用viewmodels中单独类中声明的存储的方式

在声明要在视图模型中使用的存储时,应指定“别名”配置,如下所示:

Ext.define('Mb.store.rma.Details', {
    extend: 'Ext.data.Store',
    model: 'Mb.model.rma.Detail',
    alias: 'store.rmaDetails',
    proxy: {
        (...)
    }
});
然后在“类型”存储配置的viewmodel中使用此别名:

stores:{
    details: {
        type: 'rmaDetails',
        filters: [{
            property: 'rma',
            value: '{id}'
        }],
        remoteFilter: true,
        autoLoad: true
    }
}
我不知道为什么还没有记录下来。可能是因为后来添加了此功能()


设置
自动加载:true
时,数据将自动加载。存储在viewmodel中配置扩展存储类
store.rmaDetails
。每个视图实例都有自己的关联存储实例(与默认实例
.getStore('rma.Details')不同)

你有什么问题?@LudovicFeltz我还在写问题。问题在这里。很抱歉问题不完整。好的,我删除了我的DownVoteTank you。这是非常有趣的信息。但这并不能解决存储未加载的问题。要加载它,我现在必须在控制台中执行:
grid.getStore().load()
。当我按自己的方式绑定存储时,代理为
类型:“内存”
。按照您的方式,代理是正确的(与原始存储相同)。非常感谢您提供的帮助性回答,帮助我更正了一个问题。尽管如此,我无法将其标记为已接受,因为它无法解决主要问题。当使用
类型
配置在viewmodel中定义存储时,将创建存储的新实例。这不是
.getStore获得的全局实例('rma.Detail')
Ext.define('Mb.store.rma.Details', {
    extend: 'Ext.data.Store',
    model: 'Mb.model.rma.Detail',
    alias: 'store.rmaDetails',
    proxy: {
        (...)
    }
});
stores:{
    details: {
        type: 'rmaDetails',
        filters: [{
            property: 'rma',
            value: '{id}'
        }],
        remoteFilter: true,
        autoLoad: true
    }
}