【问题标题】:ExtJS 4 : How To Reload Grid With The Same ParameterExtJS 4:如何使用相同的参数重新加载网格
【发布时间】:2012-10-18 22:04:15
【问题描述】:

我想知道为什么 ExtJS 开发人员决定在 ExtJS 4 Store API 中删除 reload() 方法。我认为这是一个糟糕的决定。

这是我的问题。我正在使用以下代码来初始化网格的存储:

store.load({
   params: {
       paramName: dynamicParameter
   }
});

注意上面代码中的dynamicParameter 变量。

然后,如果我从网格中删除一些记录,我需要重新加载存储。

问题是:重新加载商店的代码段不应该知道dynamicParameter的值。

删除记录的代码如下:

function deleteGridItems(grid, deleteUrl){
    // get selected rows
    var records = grid.getSelectionModel().getSelection();

    // ...... (codes to send request for deletion is ignored) ......

    if(success){
        grid.getStore().reload();
    }
}

很遗憾,上面的 grid.getStore().reload() 将是一个错误,因为在 ExtJS 4 中,reload() 函数不再存在。

那么如何用相同的参数重新加载store呢??

谢谢。

【问题讨论】:

    标签: extjs extjs4


    【解决方案1】:

    如果我没记错的话,load() 函数现在的功能与之前的 reload() 完全相同。试试看。

    您需要设置代理额外参数,而不是每次在 load() 上指定它:

    看到这个http://www.sencha.com/forum/showthread.php?127673-Reload-Store-in-EXT-JS-4

    【讨论】:

    • 我试过load()函数。但它没有提交dynamicParameter
    • 可以在每次调用load的时候传参数,还是不行?
    • 感谢@innerJL 提供链接。但我对解决方案有点不满意。这是因为我必须在每次加载前设置store.proxy.extraParams = {paramName:dynamicParameter}。这是因为 extraParams 不是固定的,它是动态的。而且我仍然认为 ExtJS 开发人员决定在 ExtJS 4 中删除 reload() 方法是一个非常糟糕的决定。
    【解决方案2】:

    还要注意,Ext JS 在加载之前似乎不会检查商店是否已经在加载数据。我不确定这是为什么,但可以通过覆盖 StoreTreeStore 中的 load() 方法来修复它。

    load: function(options) {
        // Loading quickly will cause data in the panel to break
        if (!this.isLoading()) {
            this.callParent(arguments);
        }
    },
    

    我没有遇到过网格问题,但是对于树,如果您很快按下刷新按钮,有时会出现错误并且树结构会中断:

    Uncaught TypeError: Cannot read property 'internalId' of undefined
    

    【讨论】:

      猜你喜欢
      • 2016-06-21
      • 2018-03-20
      • 1970-01-01
      • 2014-05-17
      • 2011-11-25
      • 2010-11-30
      • 1970-01-01
      • 2016-02-17
      • 1970-01-01
      相关资源
      最近更新 更多