【问题标题】:Store proxy extraparams retrieve record存储代理额外参数检索记录
【发布时间】:2014-02-01 04:55:43
【问题描述】:

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

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

上面的东西当然行不通

【问题讨论】:

    标签: javascript extjs model-view-controller store


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        更新:

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

        【讨论】:

        • 商店里没有,我需要在不重新加载商店的情况下得到它
        • 你能告诉我你到底想做什么吗?我的意思是功能
        • 我有两个网格。在一个项目上单击我想加载一个新元素,并将其添加到另一个网格(多选)。有什么方法可以将多个 id 发送到商店?
        猜你喜欢
        • 1970-01-01
        • 2010-10-09
        • 2014-09-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多