在Ext JS中,我具有带有JSON阅读器的数据存储。
我从服务器端的类生成具有相同层次结构的模型-例如。在服务器上,我有CustomerDto
类,它扩展了BaseDto
类;
在客户端,我还有CustomerDto
扩展了BaseDto
,而BaseDto
扩展了Ext.data.Model
。
假设我用模型SuperCustomerDto
(扩展了CustomerDto
)定义了数据存储,并从服务器发送了SuperCustomerDto
和CustomerDto
的混合列表,它们总是反序列化为CustomerDto
。
有没有一种方法可以在Ext JS中配置数据存储,以便可以区分实际的模型类型?因此,在我的情况下,列表应包含几个SuperCustomerDto
和几个CustomerDto
。
最佳答案
在Ext JS 5中,您可以设置typeProperty
,以指示要创建的模型的类型。
示例商店:
var store = Ext.create('Ext.data.Store', {
model: 'CustomerDto',
proxy: {
type: 'memory',
reader: {
type: 'json',
typeProperty: 'cls',
rootProperty: 'data'
}
}
});
示例数据:
[
{ cls: 'CustomerDto', id: 1, a: 'a' },
{ cls: 'SuperCustomerDto', id: 2, a: 'a', b: 'b' }
]
如果
typeProperty
设置为cls
,则读取器将第一个数组元素转换为CustomerDto
,第二个元素转换为SuperCustomerDto
。在5 AFAIK之前的Ext JS中,对此没有内置支持。若要模仿此行为,您应该重写
Ext.data.reader.Reader.extractData
方法。工作样本:http://jsfiddle.net/b2LS5/1/