为什么不加载在 ViewModel 中声明的商店?
Why doesn't a store declared in a ViewModel get loaded?
此问题与 有关,但属于不同的问题。
我正在这样的视图模型中声明商店:
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
在视图模型中正确更新(我可以看到这一点,因为视图通过绑定标题反映了它):
Ext.define('Mb.view.rma.Details', {
extend: 'Ext.grid.Panel',
requires: [
'Mb.view.rma.DetailsModel'
],
viewModel: {
type: 'rma-details'
},
bind: {
title: 'Retour n° {id}',
store: '{details}'
},
我面临的问题是商店没有加载,即使视图模型中有 remoteFilter: true
属性(设置 remoteFilter: true
在商店 class 而不是视图模型不会改变行为)。
要完成代码,这里是商店(没什么特别的):
Ext.define('Mb.store.rma.Details', {
extend: 'Ext.data.Store',
model: 'Mb.model.rma.Detail',
alias: 'rmaDetails', // correction as suggested by @scebotari
proxy: {
(...)
},
remoteFilter: true
});
主要问题:为什么商店没有加载?
附属问题:显示详细信息网格(例如发票行)似乎是一个常见问题。我不确定我正在尝试的是否是针对此问题使用 MVVM 的推荐方法。 MVVM 似乎比 MVC 更好,因为它提供了一次打开多个细节实例的可能性。我没有找到这个案例的例子。有没有推荐的方法来解决这个问题?
备注:
过滤器得到应有的应用。
店铺{details}
好像不是连锁店。实际上,在视图模型中将 store: 'rma.Details'
更改为 source: 'rma.Details'
时,它就变成了连锁商店。
据我所知,这不是您在视图模型中使用在单独 classes 中声明的商店的方式。
在声明要在视图模型中使用的商店时,您应该指定 "alias" 配置,如下所示:
Ext.define('Mb.store.rma.Details', {
extend: 'Ext.data.Store',
model: 'Mb.model.rma.Detail',
alias: 'store.rmaDetails',
proxy: {
(...)
}
});
然后在 "type" 商店配置的视图模型中使用此别名:
stores:{
details: {
type: 'rmaDetails',
filters: [{
property: 'rma',
value: '{id}'
}],
remoteFilter: true,
autoLoad: true
}
}
我不知道为什么这还没有记录。可能是因为此功能是后来添加的 (https://www.sencha.com/forum/showthread.php?284012-Use-existing-Store-in-ViewModel)。
设置autoLoad: true
时数据会自动加载。视图模型中的商店配置扩展了商店 class store.rmaDetails
。每个视图实例都有自己关联的商店实例(不同于默认实例 .getStore('rma.Details')
.
此问题与
我正在这样的视图模型中声明商店:
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
在视图模型中正确更新(我可以看到这一点,因为视图通过绑定标题反映了它):
Ext.define('Mb.view.rma.Details', {
extend: 'Ext.grid.Panel',
requires: [
'Mb.view.rma.DetailsModel'
],
viewModel: {
type: 'rma-details'
},
bind: {
title: 'Retour n° {id}',
store: '{details}'
},
我面临的问题是商店没有加载,即使视图模型中有 remoteFilter: true
属性(设置 remoteFilter: true
在商店 class 而不是视图模型不会改变行为)。
要完成代码,这里是商店(没什么特别的):
Ext.define('Mb.store.rma.Details', {
extend: 'Ext.data.Store',
model: 'Mb.model.rma.Detail',
alias: 'rmaDetails', // correction as suggested by @scebotari
proxy: {
(...)
},
remoteFilter: true
});
主要问题:为什么商店没有加载?
附属问题:显示详细信息网格(例如发票行)似乎是一个常见问题。我不确定我正在尝试的是否是针对此问题使用 MVVM 的推荐方法。 MVVM 似乎比 MVC 更好,因为它提供了一次打开多个细节实例的可能性。我没有找到这个案例的例子。有没有推荐的方法来解决这个问题?
备注:
过滤器得到应有的应用。
店铺{details}
好像不是连锁店。实际上,在视图模型中将 store: 'rma.Details'
更改为 source: 'rma.Details'
时,它就变成了连锁商店。
据我所知,这不是您在视图模型中使用在单独 classes 中声明的商店的方式。
在声明要在视图模型中使用的商店时,您应该指定 "alias" 配置,如下所示:
Ext.define('Mb.store.rma.Details', {
extend: 'Ext.data.Store',
model: 'Mb.model.rma.Detail',
alias: 'store.rmaDetails',
proxy: {
(...)
}
});
然后在 "type" 商店配置的视图模型中使用此别名:
stores:{
details: {
type: 'rmaDetails',
filters: [{
property: 'rma',
value: '{id}'
}],
remoteFilter: true,
autoLoad: true
}
}
我不知道为什么这还没有记录。可能是因为此功能是后来添加的 (https://www.sencha.com/forum/showthread.php?284012-Use-existing-Store-in-ViewModel)。
设置autoLoad: true
时数据会自动加载。视图模型中的商店配置扩展了商店 class store.rmaDetails
。每个视图实例都有自己关联的商店实例(不同于默认实例 .getStore('rma.Details')
.