Преобразование Sencha ExtJS Json

Итак, я делаю форму входа.

Sencha ожидает, что любой ответ Json обычно будет иметь следующий формат:

{  
  "root" : {
    "success": true/false,
    "message": ...,
    "id": ...,
    "metaData": ...,
  }
}

Однако на самом деле ответ Json, который я получил, выглядит следующим образом:

{
  "SessionId":"1", //doesn't exist if login error
  "UserName":"admin", //doesn't exist if login error
  "ResponseStatus":{
    //blank or failed to login error list 
  }
}

Формат сторонний, поэтому я не могу его изменить. Сопоставлять эти файлы непросто из-за разных структур.

Мое внутреннее чувство подсказывает мне, что я должен написать пользовательское преобразование данных json в Ext.Form -> Reader/errorReader -> Functions. Тем не менее, я новичок в ExtJS, и у меня нет мозгов, чтобы склеить все вместе. Не могли бы вы помочь?


person Tom    schedule 25.03.2013    source источник


Ответы (2)


По словам Йохана, вам не нужен специальный ридер.

Если у вашего json нет корня, не говорите своему читателю использовать корень...

Ext.define('My.model.Model1', {
    extend:'Ext.data.Model',
    fields:[
    'SessionId',
    'UserName'
    ],
    proxy:{
      type:'ajax',
      url:'./app/data/response.json',
      reader:{
        type:'json',
        messageProperty:'ResponseStatus'
      }
    }
});
person Neil McGuigan    schedule 25.03.2013
comment
Приближаемся, но вы видите, я использую Ext.Form.Panel и ридер в форме. Значит, нет модели или прокси? Как мне это вписать? - person Tom; 26.03.2013

Это можно сделать, вам нужно будет создать свой собственный Ридер. Что-то вроде этого ответа в этом посте:

как настроить extjs reader для чтения этого json?

Ext.define('Ext.data.reader.JsonPWithoutRoot', {
    extend: 'Ext.data.reader.Json',
    read: function(response) {
        return this.callParent([ { root: response } ]);
    },
    root: 'root'
});

конфигурация прокси вашего магазина:

proxy: {
    type    : 'json',
    reader  : {
        type: 'json',
        root: ''
    }       
}
person Johan Haest    schedule 25.03.2013