#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 }); после написания этого кода я не получаю вложенный элемент, он по-прежнему ведет себя как элемент по умолчанию