【问题标题】:Fastest way to clear filter from ExtJs store when filter is applied by using filterBy()使用 filterBy() 应用过滤器时从 ExtJs 存储中清除过滤器的最快方法
【发布时间】:2013-11-15 01:51:15
【问题描述】:

我正在使用 ExtJS 4.1。我正在使用商店的clearFilter() 从商店中删除过滤器。我正在使用filterBy 方法将过滤器应用于商店。我正在过滤名称不是 Ronaldo 的所有记录。

清除过滤器后,我加载了一个包含网格(附加到存储)的视图。但是当我加载网格时,我仍然可以看到过滤器没有被清除。 这家店是本地店。我没有在商店中应用任何分组。商店只使用一种模型。

myStore.filterBy(function (record) {
    if (record.get('Name') != 'Ronaldo') {
        return true;
    }
});

虽然这一切工作正常,但当我使用clearFilter() 清除过滤器时,需要一些时间。当使用filterBy() 应用过滤器时,是否有更快\更好\正确的方法来清除商店中的过滤器?

【问题讨论】:

  • 当你说“它”需要一些时间时,“它”是什么?商店?网格/数据视图?您是远程过滤还是本地过滤?有申请组吗?您是否正在抑制 clearFilter() 上的事件?您的商店中有多少模型实例?所有这些或部分或没有这些可能对您的问题很重要,但在不了解更多细节的情况下很难提出任何建议,因为 clearFilter() 应该是一个非常快速的过程(查看来源:docs.sencha.com/extjs/4.2.1/source/…)

标签: javascript extjs extjs4.1 extjs-stores


【解决方案1】:

当您使用clearFilter() 时,如果您使用filterBy() 或filter() 或者在商店中配置了过滤器,则没有什么区别。

当您清除过滤器时会发生以下情况:

  1. 商店的过滤器集合被清除
  2. 过滤后的数据将替换为存储在快照中的原始(未过滤)数据
  3. 在商店中触发“datachanged”和“refresh”事件

请注意,您可以使用 clearFilter(true) 抑制要触发的事件,如果您想在清除现有过滤器后再次过滤商店,这可能很有用。

如果清除商店的过滤器执行缓慢,则可能与第 3 步触发的布局过程(在您的网格上或与商店一起使用的任何地方)有关。

另请参阅docs 或source code。

【讨论】:

  • 如果您有remoteFilter = true,获取新的(未过滤的)数据也需要一些时间。
【解决方案2】:

这是我最好的答案,清除 filterBy 功能:

 myStore.filterBy(function (record) {
                return true;
        });

我刚做了,希望对你有帮助

【讨论】:

  • 这可能是解决问题的最简单方法。我在组合框中使用了一个远程过滤存储,但是当用户在输入中键入内容时我想在本地过滤它,所以我也使用store.filterBy() 方法。如果我使用clearFilter() 方法,我的远程过滤器将会丢失。
【解决方案3】:

只需调用:

myStore.reload();

每当您想使用 filterBy 删除过滤器集时。

【讨论】:

  • 但这会重新加载商店,当您只想删除本地过滤器时,这确实是不必要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多