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

Posted

技术标签:

【中文标题】如何在 Extjs 4 中使用嵌套的 JSON 填充表单【英文标题】:How to populate Form with nested JSON in Extjs 4 【发布时间】:2012-08-06 13:36:49 【问题描述】:

我有一个这样的 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 填充它们 谢谢

【问题讨论】:

如果你的模型中有hasMany关系,表单怎么知道要准备多少字段呢?给定您的模型定义,一个工作记录可以包含许多电子邮件... 其实我是初学者,不知道怎么实现 那么第一个问题是hasMany 关系在这里是否正确:一个工作记录可以有多个电子邮件(每个电子邮件都有第一和第二字段)吗? 假设它可以有 那么在这种情况下,表格对您没有帮助。您还需要显示一个网格,其中包含与工作记录一样多的电子邮件。这并不是很难做到,但是您需要明确地拥有一个网格(不是表单的一部分)并明确地将电子邮件加载到其中。 【参考方案1】:

目前您不能在表单字段定义中使用 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()

【讨论】:

【参考方案2】:

您需要子类化您的 Store 并添加 requires 配置。

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

【讨论】:

以上是关于如何在 Extjs 4 中使用嵌套的 JSON 填充表单的主要内容,如果未能解决你的问题,请参考以下文章

EXTJS 4 嵌套 json 数组数据到网格面板

ExtJS 4.1 - 检索嵌套 JSON 的 hasOne 信息

将嵌套 JSON 数据发送到服务器的可能方法 - extjs 4.2.x

ExtJS 4.1 - JSON 中关联的嵌套 hasOne

如何在extjs的列级获取嵌套的json数据

如何在 extjs 3.4 中为必填字段标记 (*)