#extjs #extjs4
#extjs #extjs4
Вопрос:
Я хочу загрузить данные json в форму.
мой json :
{
"success": "true",
"data": {
"operation[id]": "1199",
"operation[startdate]": "2011-10-04 08:00:00",
"operation[starthour]": "08:00",
"operation[enddate]": "2011-10-04 18:00:00",
"operation[endhour]": "18:00",
"operation[year]": "2011",
"operation[abscomment]": "",
"operation[person_id]": "13",
"operation[Mission]": {
"id": "1",
"operation_id": "1199",
"subject": null
}
}
}
Он работает с ключом, подобным operation[id], но не с operation[Mission] [id] .
В моей форме :
{
xtype: 'textfield',
fieldLabel: 'Subject',
name:'operation[Mission][subject]',
anchor: '50%',
margin: '15 10 5 10',
allowBlank: false,
blankText:'required'
},
Ответ №1:
Чтобы операция [Mission] [id] была действительной, вам нужно будет изменить структуру JSON и удалить часть вложенности. Имя — это просто строковый идентификатор, вы не можете использовать его для выражения способа получения данных из вложенной структуры JSON.
{
"success": "true",
"data": {
"operation[id]": "1199",
"operation[startdate]": "2011-10-04 08:00:00",
"operation[starthour]": "08:00",
"operation[enddate]": "2011-10-04 18:00:00",
"operation[endhour]": "18:00",
"operation[year]": "2011",
"operation[abscomment]": "",
"operation[person_id]": "13",
"operation[Mission][id]":"1",
"operation[Mission][operation_id]":"1199",
"operation[Mission][subject]":null
}
}
Комментарии:
1. Хорошо, я изменил свою структуру JSON, но она не работает =/ должен ли я также изменить форму?
2. @kyrillos Это трудно понять, не видя этого. Может быть, вы могли бы опубликовать полную форму и новый JSON как часть вашего первоначального вопроса?
3. извините, на самом деле это работает очень хорошо =) Так что большое вам спасибо!!
4. @kyrillos Нет проблем. Кроме того, если у вас есть охота на форумах Sencha, есть несколько сообщений Animal о попытках загрузить вложенные структуры JSON в форму.
Ответ №2:
В настоящее время вы не можете использовать name=’property.subProperty’ в определении поля формы:(.
Итак, чтобы заставить это работать, я возвращаю определение логического добавления (избыточного) поля в модель:
Ext.define('operation', {
extend: 'Ext.data.Model',
fields: [
'id',
'startDate',
'endDate',
...
{name: 'missionId', mapping: 'mission.id'}
]
});
затем вы можете создать поле формы, например:
{
xtype: 'displayfield',
name: 'missionId',
...
}
И он будет заполнен в form.loadRecord().
В вашем случае имена свойств JSON немного странные, поэтому сопоставление может быть немного сложным, поэтому лучше использовать функцию преобразования.
Комментарии:
1. Это потрясающе, json можно использовать «как есть» с этим отображением. Адаптация исходного json к «более совместимому» следует использовать только в крайнем случае, поскольку это не всегда возможно. Для меня это лучший ответ, и именно то, что я гуглю около 1 часа. Пальцы вверх!
Ответ №3:
В качестве альтернативы вы можете просто установить значение поля с данными из объекта, который вы, возможно, загрузили в другом месте.
В идеале имена объектов вашей модели и полей формы совпадают, и тогда вы можете просто выполнить loadRecord для формы, передаваемой в вашей выбранной записи модели. Однако, если это не так, и у вас есть фрагмент данных, которые вы прочитали из другой модели, или просто запрос Ajax, вы все равно можете задать поле формы с этими данными, установив свойство поля «значение». При необходимости вы можете изучить свойство данных объектов модели следующим образом: «MyModel.data.subObject.SomeProperty»
Ответ №4:
Если это вложенное отношение 1: 1, все работает нормально, но если у вас структура 1: N :
"operation[id]": "1199",
"operation[startdate]": "2011-10-04 08:00:00",
"operation[starthour]": "08:00",
"operation[enddate]": "2011-10-04 18:00:00",
"operation[endhour]": "18:00",
"operation[year]": "2011",
"operation[abscomment]": "",
"operation[person_id]": "13",
"operation[Mission][id]":"1",
"operation[Mission][operation_id]":"1199",
"operation[Mission][subject]":null,
"operation[Mission][id]":"2",
"operation[Mission][operation_id]":"1123",
"operation[Mission][subject]":"Second nested subject"
как вы можете копаться в данных.
Допустим, например, у вас есть форма (заказы) с некоторыми текстовыми полями и сеткой (сведения о заказе), это самый известный случай в реальном приложении.
У вас есть вложенная модель (Заказы-> Сведения о заказе), и вы хотите связать сетку с сеткой OrderDetails data…is это возможно?