Javascript 如何在Extjs 4中使用嵌套JSON填充表单
我有一个类似这样的JSONJavascript 如何在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"
{
"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'}
});
现在我想用idformJobSummary
填充我的表单。我通过在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记录有多封电子邮件(每封电子邮件都有第一个和第二个字段)?让我们假设它可以有一个表格。在这种情况下,表格对您没有帮助。您还需要显示一个表格,其中包含的电子邮件数量与工作记录的电子邮件数量一样多。这不是很难做到,但您需要明确地有一个表格(不是表格的一部分)并显式地将电子邮件加载到它。