4

我有一个这样的 JSON

{
"success": true,
"users": [{ 
    "name":"Boom",
    "emails": [{
        "first": "syedwaseem@yahoo.com",
        "second": "ed@sencha.com",
        "countries":[{
            "label":"pakistan",
            "continent":"asia"
            }]
        }]
}]

}

我已经为它创建了这样的模型

Ext.define('WR.model.WorkRecord', {
extend: 'Ext.data.Model',
fields: ['name'],      
hasMany: {model: 'WR.model.Email', name: 'emails'}


});


    Ext.define('WR.model.Email', {
        extend: 'Ext.data.Model',
        fields: ['first', 'second'],
        belongsTo: {model : 'WR.model.WorkRecord', name: 'users'},
        hasMany: {model: 'WR.model.Countries', name: 'countries'}
    });

    Ext.define('WR.model.Countries', {
        extend: 'Ext.data.Model',
        fields: ['label', 'continent'],
        belongsTo: {model: 'WR.model.Email', name: 'emails'}
    });

现在我想填充具有 id 的表单formJobSummary。我通过在存储中调用此函数成功地为非嵌套 JSON

listeners: {
    load: function(users) {         
        var form = Ext.getCmp('formJobSummary'); 
        form.loadRecord(this.data.first());
    }
}

我的表单只有简单的显示字段,我想通过这个嵌套的 JSON 填充它们谢谢

4

2 回答 2

4

目前您不能在表单字段定义中使用 name='property.subProperty' :(。

因此,为了完成这项工作,我恢复了逻辑 - 将(冗余)字段定义添加到模型中:

Ext.define('WR.model.WorkRecord', {
  extend: 'Ext.data.Model',
  fields: [
    'name',
    {name: 'emailFirst', mapping: 'emails.first'}
  ],      
  hasMany: {model: 'WR.model.Email', name: 'emails'}   
});

然后您可以创建一个表单字段,例如:

{
  xtype: 'displayfield',
  name: 'emailFirst',
  ...
}

它将被填充到 form.loadRecord()

于 2012-11-16T19:29:38.260 回答
1

您需要对您的商店进行子类化并添加所需的配置。

Ext.define('MyJsonStore', {
    extend: 'Ext.data.JsonStore',
    requires: [
        'WR.model.WorkRecord'
    ]
});
于 2012-10-04T23:29:48.877 回答