2012-06-16 3 views
1

Я пытаюсь загрузить данные JSON, на которые отвечает запрос AJAX на сетку. Моего магазин определение:ExtJS store.loadData() не загружает данные JSON

Ext.define('Report.store.CustomerDataStore', { 
    extend: 'Ext.data.Store', 
    requires: [ 
     'Report.model.Customer' 
    ], 

    constructor: function(cfg) { 
     var me = this; 
     cfg = cfg || {}; 
     me.callParent([Ext.apply({ 
      autoLoad: false, 
      storeId: 'CustomerDataStore', 
      model: 'Report.model.Customer', 
      proxy: { 
       type: 'ajax', 
       url: '', 
       reader: { 
        type: 'json', 
        root: 'data', 
        record: 'fields' 
       } 
      } 
     }, cfg)]); 
    } 
}); 

Существует кнопку в моем приложении, которое определяется следующим образом:

xtype: 'button', 
handler: function(button, event) { 
    var queryform = this.up('form').getForm(); 
    var me = this; 
    if(queryform.isValid()) 
    { 
     Ext.Ajax.request({ 
      url: 'customers/', // where you wanna post 
      success: function(response) { 
       var mystore = Ext.data.StoreManager.lookup('CustomerDataStore'); 
       var myData = Ext.JSON.decode(response.responseText); 
       console.log(myData.toSource()); 
       mystore.loadData(myData); 
      }, 
      jsonData: Ext.JSON.encode(queryform.getValues()) 
     }); 
    } 
}, 

Проблема заключается в том, что моя сетка не показывает данные ответили! Я уверен, что мой ответный формат JSON в порядке. Я проверил его с помощью json-файла. также myData.toSource() возвращает мой желаемый формат JSON. Я довольно смущен, что я делаю неправильно?

Не могли бы вы помочь?

ответ

8

Я нашел решение, мне пришлось использовать функцию loadRawData() вместо loadData().

3

loadData() загружает модели i.e. records и не анализирует данные JSON внутри. Вам нужно указать свой формат JSON в прокси-считывателе, а затем сохранить автоматически вызов Ajax при вызове store.load()

+0

Но, таким образом, я должен объявить параметр «url» в моем определении магазина. Я прав? Итак, как сообщить магазину загрузить данные из ответа Ext.AJAX.request? –

+0

У вас есть прокси с типом 'ajax' уже и url под ним пустым. Просто заполните url и вызовите 'store.load()' вместо 'Ext.AJAX.request'. – MarthyM

Смежные вопросы