为两个jsonarray创建一个模型

时间:2014-09-04 08:43:54

标签: extjs sencha-touch sencha-touch-2

demoAlerts({
    itemstatus: [
        {
            item: "1",
            name: "apple",
            type: "fruit"
        },
        {
            item: "2",
            name: "pine",
            type: "fruit"
        }
    ],
    deliverystatus: [
        {
            name: "james",
            status: "yes"
        },
        {
            name: "thomas",
            status: "no"
        },

    ]
});

我有两个数组(itemstatus和deliverystatus),我需要为这个商店创建模型。我试过的是

ParentModel:

Ext.define('test.model.ParentModel', {
    extend: 'Ext.data.Model',
    requires:['test.model.ItemModel','test.model.DeliveryModel'],
autoLoad: true,
    config : {
    fields : [ 'itemstatus', {
        name : 'demostatuslist',
        model : 'demoAlerts.model.ItemModel',
        mapping : 'itemstatus'
    },
     'portalstatus', {
            name : 'deliverystatus',
            model : 'test.model.DeliveryModel',
            mapping : ' deliverystatus'
        }]
    }

});

ItemModel

Ext.define('demoAlerts.model.ItemModel', {
    extend: 'Ext.data.Model',

    config: {
        fields: [
            { name: 'item', type: 'string' },
            { name: 'name', type: 'string' },
            { name: 'type', type: 'string' }

        ]
    }
});

DeliveryModel

Ext.define('demoAlerts.model.DeliveryModel', {
    extend: 'Ext.data.Model',
    config: {
        fields: [
            { name: 'name', type: 'string' },
            { name: 'status', type: 'string' },


        ]
    }
});

我是否正确配置了模型。我收到的商店是空的

2 个答案:

答案 0 :(得分:1)

使用关联:) http://docs.sencha.com/touch/2.3.1/#!/api/Ext.data.association.Association

在这种情况下,我会有一个带有2个hasMany关联的Model,如下所示:

Ext.define('demoAlerts.model.ContainerModel', {
    extend : 'Ext.data.Model',
    requires : [
        'demoAlerts.model.DeliveryModel',
        'demoAlerts.model.ItemModel'
    ],
    config : {
        associations: [
            {
                type           : 'hasMany',
                model          : 'demoAlerts.model.DeliveryModel',
                associationKey : 'deliveryStatus',
                name           : 'deliveryStatus',
                autoLoad       : true // this is very important
            },
            {
                type           : 'hasMany',
                model          : 'demoAlerts.model.ItemModel',
                associationKey : 'itemStatus',
                name           : 'itemStatus',
                autoLoad       : true // this is very important
            }
        ]
    }
});

然后使用商店SomeStore绑定到ContainerModel。

重要事项SomeStore中的每条记录都有deliveryStatusStore和itemStatusStore AUTOGENERATED。

了解关联。

答案 1 :(得分:0)

http://docs.sencha.com/touch/2.3.1/#!/api/Ext.data.Field都没有 也不是http://docs.sencha.com/extjs/5.0/apidocs/#!/api/Ext.data.field.Field

知道字段的有效配置选项“model”。

  • 据我所知,ExtJS或Sencha Touch中没有“父模型”这样的东西。
  • 据我所知,不可能有两个商店合二为一。

您只需对服务器进行一次调用即可加载两个(或更多)商店,如下例所示:

firststore.on('load',function() {
    secondstore.loadRawData(firststore.getProxy().getReader().rawData);
});
firststore.load()

您将firststore服务器url以及进入第一家商店的数据的root提供给secondstore root Ext.data.Request进入第二家商店的数据。

请注意,如果零记录进入第一家商店,并且选择适当的商店,则不会填写第二家商店。

如果您的任何商店可能是唯一的空店,也许您必须通过{{1}}获取rawdata并在之后将其加载到所有商店。