создать запись для вложенного элемента json

#json #extjs

#json #extjs

Вопрос:

У меня есть следующие данные json, теперь я хочу создать запись на основе этого ритуала, теперь у меня есть следующая структура для создания записи, но я не знаю, как бы мне поместить CONTACT_INFO в качестве вложенного элемента

Примечание: я напрямую считываю значения из сетки (но из сетки я не получаю вложенный элемент CONTACT_INFO, а затем хочу создать запись)

ЗАПИСЬ

 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, чтобы я мог отправлять вложенный элемент внутри json

Ответ №1:

Вы, вероятно, ищете mapping .

Как в:

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

Для записи вам также потребуется обновить toHash функцию Ext.data.JsonWriter , которую вы используете. По умолчанию не может обрабатывать вложенные объекты.

Самым простым способом может быть написание конкретной toHash функции, а не обобщенной. Учитывая Ext.data.Record подобное:

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

Затем вы бы использовали JsonWriter, подобный этому:

 CandiWriter = Ext.extend(Ext.data.JsonWriter, {
  toHash: function(rec) {
    return {
      CONTACT_INFO: {
        CANDI_EMAIL_1: rec.get('CANDI_EMAIL_1')
      }
    };
  }
})
  

Вы можете написать обобщенный, если планируете делать это часто, но я ожидаю, что это займет больше времени, чем просто поддержание специализированного JsonWriter .

Комментарии:

1. Ну, я думаю, это сопоставление предназначено для получения данных из JSON, я хочу отправить JSON с вложенным полем

2. Ну, у вас есть какой-нибудь пример, где я могу найти, как переопределить хэш-функцию JsonWriter

3. В своем ответе я дал способ переопределить его, создав подкласс JsonWriter . Затем вы бы использовали экземпляр CandiWriter для вашего writer вместо одного из JsonWriter .

4. так это значит, что мне нужно передать CandiWriter в мой JSONStore?

5. var candiWriter = новый CandiWriter(); и передал его как var storeGroom = новые внешние данные. Сохранить({ id: ‘storegroom’, restful: true, прокси: proxyGroom, автосохранение: false, reader: считыватель, writer: candiWriter }); после написания этого кода я не получаю вложенный элемент, он по-прежнему ведет себя как элемент по умолчанию