Extjs6 Excel就像带有商店的网格过滤器一样

时间:2017-10-25 10:39:21

标签: extjs extjs6 extjs6-classic

我正在尝试为网格创建复杂的过滤器。我想要以下一般行为:

  • 过滤器的商店与网格不同
  • 在A列上应用过滤器
  • 根据我的选择过滤网格
  • B列中的过滤器将显示可用的项目

此外,网格有一个清除所有过滤器的按钮等,从过滤器中删除已检查的项目。

基于此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

1 个答案:

答案 0 :(得分:0)

总的来说: 不要在文档中调用显式标记为private的方法/使用属性。 这通常意味着你做某事的方式是错误的,还有另一种更自动化的方法来实现这一点。 特别是不要使用Ext4示例并将它们1:1移植到Ext5或Ext6。 这个框架在Ext5中发生了很大的变化,在Ext6中发生了一些变化。

在这种情况下,过滤器菜单应该从过滤器商店自动创建,无需人工干预。 要取消选中菜单项,只需停止按该值过滤。

使用ColumnManager查找某个列也是为内部使用而保留的,但我可以看到你为什么要这样做。它比手动过滤响应形式的getColumns更容易。