2012-11-14 62 views
0

我使用ExtJS 4.1。這裏是我的模型和存儲:ExtJS 4.1 - 更改JsonStore的值

Ext.define('MyModel', { 
    extend: 'Ext.data.Model', 
    fields: ['status', 'data', 'data1', 'data2'] 
}); 

var store1 = Ext.create('Ext.data.JsonStore', { 
    model: 'MyModel', 
    proxy: { 
     type: 'ajax', 
     url : 'actionJsonServlet' 
    }, 
    autoLoad: true 
}); 

阿賈克斯加載店後,我想改變的第一個「狀態」的值(只是第一行)的JsonStore的。 我試圖線之下,但它不工作(最高記錄是在第2行未定義):

var record = store1.getAt(0); 
record.set("status", "Waiting"); 

我有這樣的錯誤:

Cannot call method 'set' of undefined 
+0

如何加載你的商店?你在'on()'函數中設置記錄嗎? – Patrick

+0

爲了加載我的商店,我使用上面的代碼(proxy的url),通過Ajax調用Java servlet。我的servlet返回自動加載到我的商店中的Json數據。我不使用'on()'函數。我必須使用它來等待Ajax調用返回嗎? – Zistoloen

回答

1

最有可能您的問題是由於商店的異步特性加載。根據您的代碼編寫方式,即使開啓了autoLoad,您可能也會嘗試在存儲加載之前過早進行存儲操作。

最好的方法是在存儲上設置加載事件偵聽器,然後執行您的操作。 她是一個例子:

Ext.define('MyApp.store.Drafters', { 
    extend:'Ext.data.Store', 
    model:'MyApp.model.User', 
    autoLoad:true, 
    proxy:{ 
     type:'ajax', 
     url:'user/drafters.json', 
     reader:{ 
      type:'json', 
      root:'data' 
     } 
    }, 
    listeners:{ 
     load:function (store, recs) { 
      store.insert(0, {uid:'', name:''}); //adding empty record to enable deselection of assignment 
     } 
    } 
}); 
+0

好的,等待Ajax返回。在load函數中,我試圖使用'store.update(0,{'status':'Waiting'});'來更新第一行的狀態值,但不是工作(或後面的圖表不重新加載)。 – Zistoloen

+0

你有同樣的錯誤嗎?如果沒有,那麼你的原始問題和問題就解決了,你可以繼續前進,找出圖表沒有正確綁定到商店的原因。我建議爲此創建一個特定的問題並提供相關的代碼片斷 - 圖表設置和存儲綁定。 – dbrin

+0

我有同樣的錯誤。我終於找到了解決我的問題的其他解決方案。我想展示我的餅圖片的其他標題,我在標籤上做了我想做的事情。謝謝你的時間。 – Zistoloen