2012-11-07 60 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);