我正在尝试为网格创建复杂的过滤器。我想要以下一般行为:
此外,网格有一个清除所有过滤器的按钮等,从过滤器中删除已检查的项目。
基于此link,我试图做类似的事情。我还创建了fiddle。
关于小提琴,我有一些问题:
1.以下代码返回 undefined 。根据文档,它应该返回一个Menu对象。
business.filter.menu = business.filter.createMenu({
store: localStore
})
2.当用户按清除内联过滤器按钮时,我想清除已检查的项目。
var f = Ext.ComponentQuery.query('test-grid')[0].getColumnManager().getHeaderByDataIndex(element).filter;
if (f.menu) {
for (var j = 0; j < f.menu.items.length; j++) {
f.menu.items.items[j].setChecked(false)
}
}
此处,f.menu始终未定义,因此我无法清除该复选框。不知何故,我失去了对菜单的引用。
如何根据我的场景清除复选框?为什么 createMenu 返回undefined?
修改
已接受的答案适用于此特定问题(fiddle)
答案 0 :(得分:0)
总的来说: 不要在文档中调用显式标记为private的方法/使用属性。 这通常意味着你做某事的方式是错误的,还有另一种更自动化的方法来实现这一点。 特别是不要使用Ext4示例并将它们1:1移植到Ext5或Ext6。 这个框架在Ext5中发生了很大的变化,在Ext6中发生了一些变化。
在这种情况下,过滤器菜单应该从过滤器商店自动创建,无需人工干预。 要取消选中菜单项,只需停止按该值过滤。
使用ColumnManager查找某个列也是为内部使用而保留的,但我可以看到你为什么要这样做。它比手动过滤响应形式的getColumns更容易。