【发布时间】:2014-09-28 01:38:55
【问题描述】:
我正在使用:
Ext.ux.grid.FiltersFeature
它工作正常,但每当我加载我的商店数据时
tablePanel.store.loadData(..)
过滤器不受尊重。这些列在视觉上被选择为过滤(即灰色),但显示所有行而不是过滤的行子集。
这是 JSFiddle 中的错误:
http://jsfiddle.net/oliverwatkins/7hbt79bj/4/
重现我的问题:
- 在名称上选择列过滤器,值为“foo”
- 现在应该只显示一行(foo 行)
- 现在点击重置。
- 过滤器设置为仅显示“foo”,但也显示“bar”。
我知道有一种方法可以删除过滤器:
grid.store.clearFilter();
我正在寻找这样的方法:
grid.store.applyFilters();
所以我可以在我刷新表中的数据后执行它。
** 更新 **
如果我再深入一点,我可以看到在表格面板中设置了一个过滤字符串。
tablePanel --> 过滤器 --> 过滤器 --> 项目 --> [1] --> inputItem --> value = 'mySearchString'
但是,那是 tablePanel 上的过滤器。如果我查看 tablePanel-->store,我会发现没有设置项目的过滤器:
tablePanel --> store --> filters --> filters --> items --> [0]
就好像这里有两个不同的过滤系统在起作用,它们没有相互通信。
更让人气愤的是store有filter方法,而grid没有filter方法。
grid.store.filter(); //method exists
grid.filter(); //crashes
令人费解..
【问题讨论】:
-
如果列显示它们正在被过滤,但结果没有,那么过滤值可能没有正确传递到您的服务器(假设您正在使用远程过滤) .
-
不使用远程过滤
-
好吧,即使使用本地过滤,如果过滤器处于活动状态并且具有值,则应该在刷新商店时应用它。如果您使用列菜单中的菜单激活过滤器,过滤器是否有效?
-
嗯嗯,它工作正常。它只是商店的加载。执行 store.loadData() 后是否需要执行 store.refresh() 之类的操作?
-
查看
loadData的源代码,它似乎检查filterOnLoad是否设置为true,如果是,则调用filter方法。我知道这是使用默认的商店过滤,但也许FiltersFeature也使用它。因此,您可以尝试将filterOnLoad: true和(我假设这已设置)remoteFilter: false添加到您的商店配置中。