代码之家  ›  专栏  ›  技术社区  ›  Waseem

如何在Extjs 4中用嵌套的JSON填充Form

  •  4
  • Waseem  · 技术社区  · 13 年前

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

    2 回复  |  直到 13 年前
        1
  •  4
  •   Tijuana    13 年前

    当前不能在表单字段定义中使用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',
      ...
    }
    

    它将被填充在表单.loadRecord()中

        2
  •  1
  •   A1rPun    13 年前

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

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