Форма Extjs: загрузка данных

#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 это возможно?