ExtJS - 更改代理URL然后加载商店不更新网格

时间:2015-02-17 23:30:31

标签: javascript extjs

我有一个带有商店的网格,该商店在启动应用时加载。我有一个表格,网格也绑定到该表格。最初,网格显示所有记录。搜索表单允许用户过滤记录。初始加载和搜索URL不同。单击搜索时,我会动态地将商店代理上配置的URL更改为过滤器URL,将表单值作为extraParams传递,然后加载商店。我看到请求已经完成并且返回了响应。但是,我的网格记录不刷新。

// initComponent中的网格存储

this.store = Ext.create("Ext.data.Store",{
      fields:["rptid", "text", "value", "date_created", "created_by", "active],
      autoLoad:true,
      proxy:{
        type:"ajax",
        url:"./getRpts.html",
        reader:{
          type:"json",
          root:"data"
        }
      }
    });

//搜索表单按钮的处理程序

this.getRPTGrid().getStore().getProxy().url = "./getFilteredReports.html";
    this.getRPTGrid().getStore().getProxy().extraParams = 
      this.getSearchForm().getValues();
    this.getRPTGrid().getStore().load();

就是这样。我确认正在加载存储的请求并确认调试器中收到的响应。 JSON响应还包含“数据”根,因此不是问题,字段也不会更改。我之前已经完成了10,000次,但从未经历过这种情况。有人有什么想法吗?

我甚至比较了两个请求中的请求和响应标头以及它们完全相同的减去url和params ..

1 个答案:

答案 0 :(得分:-1)

尝试使用重新加载来确保您的商店数据。 下面的代码在添加或更新后检查我的数据,所以如果我添加记录,它会自动重新加载我的商店并选择新记录。

var store = this.getRPTGrid().getStore();
Ext.Ajax.request({
    method: 'POST',
    url: "./getFilteredReports.html",
    params: {
        data: this.getSearchForm().getValues()
    },
    success: function(response) {
        store.reload({
            callback: function() {
                var newRecordIndex = store.findBy(
                    function(record, id) {
                        if (record.get(
                            'rptid'
                        ) === values.rptid) {
                            return true;
                        }
                        return false;
                    });
                getRPTGrid.getSelectionModel().select(
                    newRecordIndex);
            }
        });
    }
});

如果您想更改代理网址以更新商店,请尝试更新模型中的代理,而不是在商店中更新,如下所示:

Ext.define('APP.model.m_gis', {
    extend: 'Ext.data.Model',
    alias: 'widget.gisModel',
    proxy: {
        type: 'jsonp',
        url: './getRpts.html',
        reader: {
            type: 'json',
            root: 'data',
            totalProperty: 'totalCount'
        }
    },
    fields: ["rptid", "text", "value", "date_created", "created_by",
        "active"
    ]
});

这是商店的样子:

Ext.define('APP.store.s_gis', {
    extend: 'Ext.data.Store',
    alias: 'widget.gisStore',
    model: 'APP.model.m_gis'
});

并按照您的意愿更改代理:

var place_store = Ext.create('APP.store.s_gis');

place_store.getProxy().setExtraParam('url', "./getFilteredReports.html");