如何在Sencha Touch的selectfield中实现嵌套和关联的model-json?

时间:2015-09-17 10:24:59

标签: javascript json extjs sencha-touch

我有一个带有相关模型的商店,我需要将这个相关模型的值包含在Sencha Touch中的selectfield组件中。

这是我的父模型:

    Ext.define('x.customer.model.CustomerModel', {
    extend: 'Ext.data.Model',
    requires:[
        'x.customer.model.CustomerTemplateModel'
    ],
    config: {
        useCache: false,
        idProperty: 'id',
        fields: [
            {
                name: 'id',
                type: 'string'
            },
            {
                name: 'address',
                type: 'string'
            },
            {
                name: 'name',
                type: 'string'
            },
            {
                name: 'type',
                type: 'int'
            }
        ],
        associations: [
            {
                type: 'hasMany',
                associatedModel: 'Survey.customer.model.CustomerTemplateModel',
                ownerModel: 'Survey.customer.model.CustomerModel',
                associationKey: 'templates',
                autoLoad: true,
                name: 'templates'
            }
        ]
    }
});

和孩子模特:

Ext.define('x.customer.model.CustomerTemplateModel', {
    extend: 'Ext.data.Model',
    requires:[],
    config: {
        useCache: false,
        rootProperty: 'templates',
        fields: [
            {
                name: 'text',
                type: 'string'
            },
            {
                name: 'value',
                type: 'string'
            }
        ]
    }
});

商店:

requires: ['Survey.customer.model.CustomerModel'],

config: {
    model: 'Survey.customer.model.CustomerModel',

    proxy: {
        type: 'ajax',
        reader: {
            type: 'json',
            rootProperty: 'customers'
        }
    }
}

目前json有这样的结构:

{
  "id": "00000001",
  "address": "Antsy Road",
  "name": "asfas",
  "phone": "55555",
  "openSurveys": 7,
  "templates": [
    {
      "text": "123",
      "value": "Template 1"
    }
  ],
  "type": 1,
  "withSurveys": true
},

如何在selectfield中实现“templates”嵌套json中包含的数据?

提前谢谢

1 个答案:

答案 0 :(得分:1)

加载商店后,如果您有一个自定义商:

var templatesData = []; // What will be inserted to the ComboBox
for (var i=0; i < custommers[0].get('templates').length; i++) { // Running threw the values and populating templatesData 
    var templateModel = custommers[0].get('templates')[i];
    var templateCombo = { 
          text: templateModel.data.text, 
          value: templateModel.data.value
   };

    templatesData.push(templateCombo); 
}
// Setting the values to the combobox 
Ext.getCmp('myCombo').setStore(Ext.create("Ext.data.Store", { 
     model: 'x.customer.model.CustomerTemplateModel', 
     data :templatesData 
}));

这不是一个独特的解决方案,您也可以创建一个新的商店实例。以下是有关如何为组合框设置“store”属性的更多信息:http://docs.sencha.com/extjs/4.1.3/#!/api/Ext.form.field.ComboBox-cfg-store