如何在网格中重置ExtJS过滤器。更具体地说,如何获得标题以兑现对过滤的更改。
即。这很好用:
grid.store.clearFilter();
但是标题渲染都是错误的。我需要进入所有菜单对象并取消选中复选框。
我很迷茫。我很确定这给了我filterItems:
var filterItems = grid.filters.filters.items;
从这些过滤项目中,我可以获得如下菜单项:
var menuItems = filter.menu.items;
但这就是我能得到的。我期待菜单项中有某种复选框对象,然后我可以取消选中该复选框,希望然后标题呈现会发生变化。
更新:
我现在有了这段代码。网格存储已清除其筛选器。接下来,我从 grid.filters.filters.items 获取filterItems并迭代它们。然后我在每个菜单项上调用一个函数。
grid.store.clearFilter();
var filterItems = grid.filters.filters.items;
for (var i = 0; i<filterItems.length; i++){
var filter = filterItems[i];
filter.menu.items.each(function(checkbox) {
if (checkbox.setChecked)
checkbox.setChecked(false, true);
});
}
复选框被调用,但仍然没有发生任何事情:(
答案 0 :(得分:15)
试试这段代码:
grid.filters.clearFilters();
这应该处理网格及其底层存储。
当你这样做时
grid.store.clearFilter();
它只能清除商店中的过滤器,但网格的视图无法通过该调用进行更新。因此,要自动处理网格视图以及网格存储,只需使用
grid.filters.clearFilters();
希望它有所帮助!
干杯!
答案 1 :(得分:0)
您的更新对我有所帮助,但您忘记了输入文本而不是复选框的情况。
所以这是我添加的解决方案:
grid.filters.clearFilters();
var filterItems = grid.filters.filters.items;
for (var i = 0; i<filterItems.length; i++){
var filter = filterItems[i];
filter.menu.items.each(function(element) {
if (element.setChecked) {
element.setChecked(false, true);
}
if(typeof element.getValue !== "undefined" && element.getValue() !== "") {
element.setValue("");
}
});
}
答案 2 :(得分:0)
使用带有gridfilters插件的网格时 并引发
grid.filters.clearFilters();
它会重置已应用的过滤器,但不会清除菜单内文本字段中的值。
对于纯文本字段文本,您可以尝试以下操作:
grid.filters.clearFilters();
const plugin = grid.getPlugin('gridfilters');
let activeFilter;
if('activeFilterMenuItem' in plugin) {
activeFilter = plugin.activeFilterMenuItem.activeFilter
}
if (activeFilter && activeFilter.type === "string") {
activeFilter.setValue("");
}