2012-06-16 198 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()加載模型即記錄,並且不解析裏面的JSON數據。您需要在代理讀取器中指定您的JSON格式,然後存儲將在您撥打電話時自動執行Ajax調用store.load()

+0

但是,這樣我必須在我的商店定義中聲明'url'參數。我對嗎?那麼如何告訴商店從Ext.AJAX.request的回覆中加載數據呢? –

+0

您已經有類型'ajax'的代理並且它下面的url爲空。只需填寫url並調用'store.load()'而不是'Ext.AJAX.request'。 – MarthyM