2

在 Ext JS 中,我有 JSON 阅读器的数据存储。我从服务器端的类生成模型,具有相同的层次结构 - 例如。在服务器上,我有CustomerDto扩展类的BaseDto类;在客户端,我也有CustomerDtowhich extendsBaseDtoBaseDtoextends Ext.data.Model

假设我用模型SuperCustomerDto(扩展)定义数据存储并从服务器CustomerDto发送混合列表,它们总是反序列化为.SuperCustomerDtoCustomerDtoCustomerDto

有没有办法在 Ext JS 中配置数据存储,以便区分实际模型类型?所以在我的情况下,列表应该包含很少SuperCustomerDto和很少CustomerDto

4

1 回答 1

4

在 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/

于 2014-07-12T10:25:01.073 回答