2012-08-06 98 views
4

我有这样如何填充表格的嵌套JSON在ExtJS的4

{ 
"success": true, 
"users": [{ 
    "name":"Boom", 
    "emails": [{ 
     "first": "[email protected]", 
     "second": "[email protected]", 
     "countries":[{ 
      "label":"pakistan", 
      "continent":"asia" 
      }] 
     }] 
}] 

一个JSON}

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

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()); 
    } 
} 

我的形式具有只是简单的displayfields,我想通过这个嵌套的JSON 感谢

+0

如果你的模型中有'hasMany'关系,表单怎么知道要准备多少个字段?鉴于你的模型定义,工作记录可以有很多电子邮件... – Izhaki 2012-08-06 13:45:35

+0

其实我是一个初学者,并没有任何想法如何实现它 – Waseem 2012-08-06 13:59:10

+0

那么第一个问题是'hasMany'关系在这里是否正确:can a工作记录有多个电子邮件(每封电子邮件都有第一和第二个字段)? – Izhaki 2012-08-06 14:01:39

回答

4

目前,您不能在表单字段定义:(才能使用的名称=“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', 
    ... 
} 

这将是popul ated on form.loadRecord()

1

您需要继承您的店铺,并添加requires config来填充它们。 。

Ext.define('MyJsonStore', { 
    extend: 'Ext.data.JsonStore', 
    requires: [ 
     'WR.model.WorkRecord' 
    ] 
});