Форма Extjs: загрузка данных - PullRequest
1 голос
/ 04 октября 2011

Я хочу загрузить данные json в форму.

my 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
        }
    }
}

Работает с ключом, как операция [id], но не с операцией [Mission] [id].

В моем виде:

{
  xtype: 'textfield',
  fieldLabel: 'Subject',
  name:'operation[Mission][subject]',
  anchor: '50%',
  margin: '15 10 5 10',
  allowBlank: false,
  blankText:'required'
},

Ответы [ 4 ]

3 голосов
/ 04 октября 2011

Чтобы операция [Миссия] [id] была действительной, вам нужно изменить структуру JSON и удалить часть вложенности. name - это просто строковый идентификатор, его нельзя использовать для выражения того, как получить данные из вложенной структуры 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 голос
/ 16 ноября 2012

В настоящее время вы не можете использовать 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 немного странные, поэтому сопоставление может быть немного сложным, поэтому лучше использовать функцию convert.

0 голосов
/ 26 октября 2011

Если это вложенное отношение 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"

как вы можете копаться в данных. Допустим, например, что у вас есть форма (заказы) с некоторыми текстовыми полями и сеткой (детали заказа), это когда-либо известный случай в реальном приложении. У вас есть вложенная модель (Orders-> Order Details), и вы хотите связать сетку с сетевыми данными OrderDetails ... это возможно?

0 голосов
/ 09 октября 2011

В качестве альтернативы вы можете просто установить значение поля с данными из объекта, который вы могли загрузить в другом месте.


В идеале имена вашего объекта Model и поля Form совпадают, и тогда вы можете просто выполнить loadRecord на форме, передаваемой в выбранной вами записи Model. Однако, если это не так, и у вас есть кусок данных, которые вы читаете из другой Модели, или просто запрос Ajax, вы все равно можете установить поле формы с этими данными, установив свойство «значение» поля. При необходимости вы можете покопаться в свойстве data объектов Model следующим образом: "myModel.data.subObject.someProperty"

...