Javascript 如何在Extjs 4中使用嵌套JSON填充表单

Javascript 如何在Extjs 4中使用嵌套JSON填充表单,javascript,extjs4,extjs4.1,Javascript,Extjs4,Extjs4.1,我有一个类似这样的JSON { "success": true, "users": [{ "name":"Boom", "emails": [{ "first": "syedwaseem@yahoo.com", "second": "ed@sencha.com", "countries":[{ "label":"pakistan", "continent":"asia"

我有一个类似这样的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'}
    });
}

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

{
"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
填充我的表单。我通过在store中调用此函数成功地为非嵌套JSON填充了表单

listeners: {
    load: function(users) {         
        var form = Ext.getCmp('formJobSummary'); 
        form.loadRecord(this.data.first());
    }
}
我的表单只有简单的显示字段,我想通过这个嵌套的JSON来填充它们
谢谢

您需要对存储进行子分类并添加配置


当前无法在表单字段定义()中使用name='property.subperty'

因此,为了实现这一点,我将逻辑-添加(冗余)字段定义还原为模型:

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()中

如果您的模型中有
hasMany
关系,那么表单如何知道需要准备多少字段?根据您的模型定义,一个工作记录可以有许多电子邮件…实际上,我是一个初学者,不知道如何很好地实现它。第一个问题是
hasMany
关系是否正确k记录有多封电子邮件(每封电子邮件都有第一个和第二个字段)?让我们假设它可以有一个表格。在这种情况下,表格对您没有帮助。您还需要显示一个表格,其中包含的电子邮件数量与工作记录的电子邮件数量一样多。这不是很难做到,但您需要明确地有一个表格(不是表格的一部分)并显式地将电子邮件加载到它。