从Sencha Touch 2.x中的商店中删除单个过滤器

时间:2013-06-03 14:16:04

标签: extjs sencha-touch

我目前正在研究一个拥有大量所有数据的Sencha Touch应用程序,而且我只想使用该数据的一部分。商店已经过滤到子集,然后我可能想要进一步过滤它。

我可以使用 filter(col,val)轻松地向商店添加过滤器。但是,如果我想将我的数据集“还原”为“原始”较少过滤但仍然过滤的数据,我该如何删除/清除仅过滤

在API文档中,我只能找到无效的 clearFilter(),因为它会删除先前设置的过滤器的所有

我只能认为这样做的方法是拍摄原始滤镜的快照,清除所有滤镜,然后重新应用原始滤镜......但这听起来会对性能产生很大影响,特别是如果原始数据集很大。

有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

这不适用于本地过滤的商店,并且使用一些未记录的功能,因此可能会使您面临未来的API更改,但您可以访问类型为{{1}的商店的data属性这确实暴露了removeFilters方法。

查看其implementation,您会看到可以通过此类型的调用删除过滤器:

Ext.util.Collection

完成此操作后,您必须手动触发事件以通知与商店绑定的内容:

store.data.removeFilters(col);

// remove all filters at once, because the collection will be updated for each call to removeFilters
store.data.removeFilters([col1, col2]);

现在,应用新的过滤器集将意味着循环遍历所有集合中的项目(而不是仅已经通过先前过滤器的项目)。因此,除非我遗漏了某些内容,否则删除过滤器而不是使用全新的设置替换当前设置的过滤器将无法获得任何性能提升。

您必须注意的是同时应用所需的过滤器更改(通过删除或添加它们),因为所有过滤方法都会触发所有项目的传递。

如果我是你,我不会太担心,因为AFAIK循环几千个物体应该是一个几乎瞬间的操作,即使在像手机这样的小型处理器上也是如此。