存储代理extraparams检索记录

时间:2014-01-13 12:31:21

标签: javascript extjs model-view-controller store

我需要将一些数据发送到商店代理,而不是重新加载商店我只想获得该记录。可以这样做吗?

 var newRecord =  documentStore.getProxy().extraParams = {id:element.data.id};

上面的东西当然不起作用

3 个答案:

答案 0 :(得分:0)

如果该数据/记录已在商店中加载,那么您可以使用store.findRecord()store.getById()方法获取该数据/记录。

但如果您想要存储中未加载/可用的记录,则需要使用所需值(过滤器)重新加载商店。

更新:

好吧,您可以捕获第一个网格的itemclickcellclick事件,并通过传递所需的过滤器参数加载第二个网格存储,或者您可以创建AJAX请求,获取响应并构建记录并将其添加到其他商店。

答案 1 :(得分:0)

如果你的模型上有代理,你可以使用静态“加载”方法,即如果你有一个模型“联系”,你会这样做:

Contact.load("ID_VALUE", {
     scope: this,
     callback: function (record, operation, success) {
     }
});

答案 2 :(得分:0)

听起来您正试图从一个项目列表中选择一个记录,检索该选定项目的其他数据,然后将该项目添加到现有商店。

如果这是错误的,请纠正我。但是,按照这个假设,您可以在模型上使用 bhutten 建议的加载方法。在返回模型(即回调)时,您将通过Ext.data.Store.add(model)方法将该模型添加到Store。这会将记录添加到数据存储中,而无需重新加载存储中的所有数据。

也许更优雅的方法可能是创建扩展Ext.data.Store的自己的商店(即myApp.store.MyStore)。然后,创建您自己的方法,该方法接受可以将模型加载到Store而无需重新加载整个商店的标识符(或多个标识符)。

Ext.define('MyApp.store.MyStore' {
  extend: 'Ext.data.Store',
  requires: 'Ext.data.reader.Json',
  model: 'MyApp.model.MyModel',
  loadMyModel: function (id) {
    Ext.Ajax.request({
      url: 'someurl',
      params: {id: id},
      success: function (resp) {
        var myModel = null; // parse response into MyModel
        this.add(myModel);
      },
      scope: this
    });
  }
});