2012-11-07 58 views
3

更新數據我有一個模型定義如下:煎茶EXT-JS 4:如何在商店

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

    fields: [ 
     { 
      name: 'id' 
     }, 
     { 
      name: 'p1' 
     }, 
     { 
      name: 'p2' 
     }, 
     { 
      name: 'p3' 
     }, 
     { 
      name: 'p5' 
     }, 
     { 
      name: 'p6' 
     }, 
     { 
      name: 'p7' 
     } 
    ] 
}); 

該商店的定義如下:

Ext.define('MyApp.store.TestStore', { 
    extend: 'Ext.data.Store', 
    requires: [ 
     'MyApp.model.TestModel' 
    ], 

    constructor: function(cfg) { 
     var me = this; 
     cfg = cfg || {}; 
     me.callParent([Ext.apply({ 
      autoLoad: true, 
      storeId: 'TestStoreID', 
      model: 'MyApp.model.TestModel', 
      proxy: { 
       type: 'ajax', 
       url: 'getparams', 
       reader: { 
        type: 'json', 
        root: 'getdata.params' 
       } 
      } 
     }, cfg)]); 
    } 
}); 

控制器使用AJAX代理加載數據如下:

var sIndex = 1; 
AppGlobals.mystore = Ext.getStore('PollStore'); 
AppGlobals.mystore.load({params: {id: sIndex, p1:'1',p2:'2', p3:'3', p4:'5', p5:'6', p6:'7'}}); 

這一切工作正常。我想修改寫入加載命令的地方的p1,p2,p3,p5,p6,p7的值。也就是說,而不是callint mystore.load()有什麼辦法可以將硬編碼數據直接加載到商店中?

我的意思,可以說我有6個值定義爲

var p1val = 1; 
var p2val = 2; 
var p3val = 3; 
var p5val = 4; 
var p6val = 5; 
var p7val = 6; 

反正是有,我可以做到以下幾點:

AppGlobals.mystore = Ext.getStore('PollStore'); 
AppGlobals.mystore.somefunction(p1val, p2val, p3val, p5val, p6val, p7val); 

其中somefunction()可以immeadiately更新商店的價值觀和我不必調用load()函數將會從代理服務器獲取數據?

回答

1

確實有一種方法可以做到這一點。您正在尋找loadData方法。​​

請確保注意它需要兩個參數 - 記錄(數據)數組以及是否擦除當前存儲區記錄。默認情況下,loadData首先刪除存儲中的任何現有數據,我認爲這是您想要做的 - 如果是這樣,您只需要第一個數組參數。

這裏的問題是如何能夠解決的代碼示例:

store.loadData(data, false); 
grid.reconfigure(store);