使用filterBy()应用筛选器后,清除ExtJs存储中的筛选器的最快方法是什么?

9
我正在使用ExtJS 4.1。我正在使用store的clearFilter()方法来从store中删除筛选器。我使用filterBy方法对store应用筛选器。我正在筛选所有名称不是Ronaldo的记录。
在清除筛选器后,我加载一个包含网格(附加到store)的视图。但是当我加载网格时,我仍然可以看到筛选器没有被清除。 该store是本地存储。我没有在store上应用任何分组。Store只使用一个模型。
myStore.filterBy(function (record) {
    if (record.get('Name') != 'Ronaldo') {
        return true;
    }
});

虽然所有这些都很好,但是当我使用clearFilter()清除筛选器时,它需要一些时间。在使用filterBy()应用筛选器时,是否有更快、更好、更正确的方法可以清除存储上的筛选器?


1
当你说“它”需要一些时间时,“它”是什么?存储器?网格/数据视图?您是在远程还是本地进行过滤?您是否应用了分组?您是否在clearFilter()上抑制事件?您的存储器中有多少个模型实例?所有或一些或没有这些都可能对您的问题很重要,但是如果不知道更多细节,很难建议任何事情,因为clearFilter()应该是一个非常快速的过程(检查源代码:http://docs.sencha.com/extjs/4.2.1/source/Store.html#Ext-data-Store-method-clearFilter)。 - existdissolve
3个回答

14
当使用clearFilter()时,无论您是否使用了filterBy()filter()或者在存储中配置了过滤器,都不会有任何差异。
以下是清除过滤器时发生的情况:
  1. 存储中的过滤器集合被清除
  2. 过滤后的数据被替换为存储在快照中的原始(未经过滤的)数据
  3. 存储上触发“datachanged”和“refresh”事件
请注意,您可以使用clearFilter(true)来阻止事件被触发,这可能在清除现有过滤器后想要重新过滤存储时很有用。
如果清除存储的过滤器执行缓慢,则可能与步骤3触发的布局过程(在网格或其他用于存储的地方)相关。
还可以参考文档源代码

如果remoteFilter = true,获取新的(未过滤)数据也需要一些时间。 - Peter Ivan

4

这里是我对filterBy函数的最佳解释:

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

我刚刚完成了它,希望它能有所帮助。


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

0

只需调用a:

myStore.reload();

每当您想要删除使用 filterBy 设置的过滤器时。


但是这会重新加载存储,当您只想删除本地过滤器时,这实际上是不必要的。 - MarthyM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接