【发布时间】:2017-05-23 13:57:16
【问题描述】:
我已经习惯了带有 MVC 模式的 ExtJs,并且我正在尝试实现 MVVM 模式。我无法将商店绑定到我的视图。
我有一个主网格,并在选择一条线时尝试打开一个详细信息网格。
detailsView = mainPanel.add({
xtype: 'rma-details',
viewModel: {data: {id: id}}
})
Ext.define('Mb.view.rma.Details', {
extend: 'Ext.grid.Panel',
alias: 'widget.rma-details',
requires: [
'Mb.view.rma.DetailsController',
'Mb.view.rma.DetailsModel'
],
controller: 'rma-details',
viewModel: {type: 'rma-details'},
bind: {
title: 'Retour n° {id}',
store: '{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: {
model: 'rma.Detail',
filters: [{
property: 'rma',
value: '{id}'
}]
}
}
});
Ext.define('Mb.model.rma.Detail', {
extend: 'Ext.data.Model',
fields: [
{name: 'id', type: 'int'},
{name: 'rma', type: 'int'},
(...)
],
proxy: { // cf. 2nd subsidiary question
(...)
}
});
视图的标题正确绑定到id 的值。
但是对于商店,我得到了错误:
[E] Ext.data.schema.Schema.lookupEntity():没有这样的实体“rma.Detail”。
未捕获的错误:没有这样的实体“rma.Detail”。
我不明白为什么在 ViewModel 中无法识别对模型 (model: 'rma.Detail') 的引用。使用 MVC 模式,我从不需要引用模型,我总是使用类似于 rma.Details 的引用来引用商店。
主要问题是:我需要如何在 ViewModel 中声明模型rma.Details?
附属问题是:
- 这是在视图中设置值
id的正确方法吗? ({xtype: 'rma-details', viewModel: {data: {id: id}}}) ? - 我习惯于总是在 store 类中定义代理。这里我没有 store 类了,因为它是在 ViewModel 中定义的。像我上面那样在模型类中声明它是否正确?
【问题讨论】:
标签: extjs mvvm extjs6 extjs6-classic