为嵌套的json元素创建记录

时间:2011-04-27 09:44:01

标签: json extjs

我现在有以下json数据我想基于这个仪式创建一个记录现在我有以下结构来创建记录但我不知道如何将CONTACT_INFO作为嵌套元素

注意:我直接从GRID读取值(但是从网格我没有获得嵌套元素CONTACT_INFO,然后想要创建记录)

RECORD

var record=  Ext.data.Record.create([

                { name: 'CANDI_SR_NO'}, 
                { name: 'CANDI_NAME'}, 
                { name: 'CANDI_CASTE_BAR'},  
                { name: 'CANDI_IS_NRI'},  
                { name: 'CANDI_CASTE'},  
                { name: 'CANDI_SUB_CASTE'},  
                { name: 'CANDI_STATUS'},  
                { name: 'CANDI_AGE'},  
                { name: 'CANDI_HEIGHT'},  
                { name: 'CANDI_NATIVE_PLACE'},  
                { name: 'CANDI_EDUCATION'},  
                { name: 'CANDI_DESIGNATION'},  
                { name: 'CANDI_COMPANY'},  
                { name: 'CANDI_EMAIL_1'},               
                { name: 'CANDI_EMAIL_2'},
                { name: 'CANDI_EMAIL_3'},
                { name: 'CON_L_1'},  
                { name: 'CON_L_2'},  
                { name: 'CON_L_3'},  
                { name: 'CON_M_1'},  
                { name: 'CON_M_2'},  
                { name: 'CON_M_3'},  
                { name: 'CANDI_SALARY'},                        
                { name: 'CANDI_COMMENT'},

                    ]);

JSON

[
  {
    "CANDI_SR_NO": "12",
    "CANDI_NAME": "XYZ",
    "CANDI_CASTE_BAR": false,
    "CANDI_IS_NRI": "false",
    "CANDI_CASTE": "RAS",
    "CANDI_SUB_CASTE": "",
    "CANDI_STATUS": "",
    "CANDI_AGE": "",
    "CANDI_NATIVE_PLACE": "",
    "CANDI_EDUCATION": "",
    "CANDI_DESIGNATION": "",
    "CANDI_COMPANY": "",
    "CONTACT_INFO": 
      {
        "CANDI_EMAIL_1": "asdf",
        "CANDI_EMAIL_2": "",
        "CANDI_EMAIL_3": "",
        "CON_L_1": "asdf",
        "CON_L_2": "",
        "CON_L_3": "",
        "CON_M_1": "",
        "CON_M_2": "",
        "CON_M_3": ""
      }
    ,
    "CANDI_SALARY": "",       
    "CANDI_COMMENT": ""
  }
]

我想以上面的json格式发送数据,但是一旦我点击表单的提交按钮。所以我问如何在extjs中创建一个Record,以便我可以在json中发送嵌套元素

1 个答案:

答案 0 :(得分:0)

您可能正在寻找mapping

如:

{ name: 'CANDI_EMAIL_1', mapping: 'CONTACT_INFO.CANDI_EMAIL_1'},

对于写作,您还需要更新您正在使用的toHash的{​​{1}}功能。默认值无法处理嵌套对象。

最简单的方法可能是编写特定的Ext.data.JsonWriter函数而不是通用函数。鉴于toHash这样:

Ext.data.Record

然后你会像这样使用JsonWriter:

var rec = new record({
  ...
  'CANDI_EMAIL_1': 'foo@example.com'
  ...
});

如果你希望这么做,你可以编写一个通用的,但我希望它需要的时间比维护一个专门的CandiWriter = Ext.extend(Ext.data.JsonWriter, { toHash: function(rec) { return { CONTACT_INFO: { CANDI_EMAIL_1: rec.get('CANDI_EMAIL_1') } }; } }) 要长。