store.add()方法怎么不执行映射?

时间:2015-03-10 17:45:43

标签: extjs extjs4 extjs5

我有一个嵌套的json数据,即:

{
name: 'alex',
 tel: {
    personal: '347xxxx',
    work: '331xxxx'
 }
}

然后是以下模型:

Ext.define("Employer", {
    extend: 'Ext.data.Model',
    idProperty: 'personalTel',
    fields: [...
            {name: 'personalTel', mapping: 'tel.personal'}

最后是以下商店:

Ext.create('Ext.data.Store',{ 
        model: 'Employer',
        proxy: {
            type: 'memory',
            reader: {
                type: 'json',
                root: 'root'
            }
        },
        data: myInitialData //an array containing json objects

只要数据包含在myInitialData中,就会正确设置personalTel字段。 但是,向商店添加新记录不会触发映射,因此我发现自己有一个奇怪的personalTel属性,即自动ID extjs put!

1 个答案:

答案 0 :(得分:1)

ExtJS允许您在使用阅读器时通过嵌套加载多个模型。它不允许在直接实例化模型时创建这些模型,这就是将对象添加到商店的功能。

这个想法是每个模型都用自己的商店分开处理。想要为客户添加电话号码?首先创建电话号码,将其放入商店,然后参考电话号码创建客户。

但这种方法有点笨拙,只适用于真正属于单独实体的模型。

另一种方法是使用自定义类型,或者只是使用“自动”类型(将数据视为可以执行所需操作的blob)。这两种方法都有其缺点。