2017-02-19 24 views
0

Я надеюсь, что кто-то может помочь мне разобраться с этой структурой данных json.ExtJS 6 Rest Proxy, где объект данных JSON - это ID

Вот пример того, что: (У меня есть нулевой контроль над этими данными)

{ 
    "1": { 
     "name": "thing 01", 
     "attributes": { 
      "color": "red", 
      "brand": "ACME" 
     } 
    }, 
    "2": { 
     "name": "thing 02", 
     "attributes": { 
      "color": "blue", 
      "brand": "ACME" 
     } 
    } 
} 

Так что я запутался о том, как получить записи с помощью reader

Ext.define('MyApp.model.Thing', { 
    extend: 'Ext.data.Model' 

    fields: [ 
     { name: 'name' }, 
     { name: 'attributes', type: 'auto' } 
    ], 

    proxy: { 
     type: 'rest', 
     url: 'http://example.com/api/things', 

     reader: { 
      type: 'json', 
      rootProperty: ??? // <--- How should this work? 
     } 
    } 
}); 

Я задался вопросом, есть ли способ сделать что-то вроде ...

rootProperty: '[id]' 

Также есть способ указать t он ID, когда это объект данных? Может быть, как-то использовать конфигурацию idProperty на модели?

Должен ли я использовать метод reader.format? Это казалось бы немного брутто ...

Любые идеи оцениваются. Благодаря!

+0

Конфигурация 'rootProperty' предназначена для установки корня всех данных, а не для каждой записи. Кроме того, я не нашел метод 'reader.format' в ExtJS 6 [документация] (http://docs.sencha.com/extjs/6.2.0/). – MarthyM

ответ

2

Ваш EXACT-ответа уже ответил here.

Вы должны реализовать пользовательский считыватель и переопределить метод getResponseData.

Ext.define('MyReader', { 
    extend: 'Ext.data.reader.Json', 
    alias: 'reader.myreader', 

    getResponseData: function(response) { 
     var data = this.callParent([response]); 

     //do stuff here 

     return data; 
    } 
}); 
+0

Ах, спасибо! Почему-то я так и не нашел это на форумах Sencha. Это поможет кучу! – Trozdol

5

Написать специальный класс для чтения:

Ext.define('MyReader', { 
    extend: 'Ext.data.reader.Json', 
    alias: 'reader.myreader', 

    config: { 
     transform: function (data) { 
      var ret = [], 
       key, o; 

      for (key in data) { 
       o = data[key]; 
       o.id = key; 
       ret.push(o); 
      } 

      return ret; 
     } 
    } 
}); 

Ext.define('Thing', { 
    extend: 'Ext.data.Model', 

    fields: ['name', 'attribute'], 

    proxy: { 
     type: 'ajax', 
     url: 'data1.json', 

     reader: { 
      type: 'myreader' 
     } 
    } 
}); 

Пример fiddle.