javascript - ag-grid 自定义过滤器添加了一个清除过滤器按钮。 JS 不是 Angular

标签 javascript ag-grid

使用 ag-grid 站点上的示例,我编写了一个基于 RAG 状态的过滤器。值可以是未定义、红色、琥珀色、绿色或完整。

使用 https://www.ag-grid.com/javascript-grid-filter-component/ 处的 PersonFilter 示例,我正在使用一个数组来添加点击值,然后过滤网格。这真的很好用。但是,我打算通过清除按钮清除过滤器。

这是我目前的代码:

RagFilter.prototype.setupGui = function (params) {

            this.filterText = [];
            this.gui = document.createElement('div');
            this.gui.innerHTML =
                '<div style="padding: 6px; width: 150px;">' +
                    '<div><h3>RAG Filter</h3></div>' +
                    '<div><span class="icon icon-rag-s-undefined" data-value="undefined"></span>&nbsp;' +
                        '<span class="icon icon-rag-s-red" data-value="red"></span>&nbsp;' +
                        '<span class="icon icon-rag-s-yellow" data-value="yellow"></span>&nbsp;' +
                        '<span class="icon icon-rag-s-green" data-value="green"></span>&nbsp;' +
                        '<span class="icon icon-rag-s-blue" data-value="blue"></span>' +
                        '<a href="#" id="clear_filter" class="btn btn-primary btn-sm" data-filter="rag">CLEAR</a>';

            var that = this;
            $('body').on('click', '.icon',  function(e){
                if (that.filterText.indexOf($(e.target).data('value'))) {
                    that.filterText.push($(e.target).data('value'));
                }
                params.filterChangedCallback();
            });
            $('body').on('click', '#clear_filter',  function(e){
                e.preventDefault();
                var filter = $(this).data('filter');
                var filterComponent = params.api.getFilterInstance(filter);
                filterComponent.setModel(null);
                this.filterText = null;

            });
        };

此方法取自 https://www.ag-grid.com/javascript-grid-filter-component/ 的示例使用 PersonFilter。

我也在过滤器代码之外尝试了按钮的点击事件处理程序:

$('body').on('click', '#clear_filter',  function(e){
                e.preventDefault();
                var filter = $(this).data('filter');
                var filterComponent = gridOptions.api.getFilterInstance(filter);
                filterComponent.setModel(null);
            });

我总是收到变量 filterComponent 的未定义错误。变量 filter 设置为 'rag',它来自清除按钮上的 data-filter 属性。

我一直在研究这个问题,似乎找不到一个清晰的教程或代码示例来完全实现我想要实现的目标。

非常感谢所有帮助..

干杯

最佳答案

在反复研究代码后,我发现您实际上需要 colDef.colId 值,而不是文档建议的字段名称:

$('body').on('click', '#clear_filter',  function(e){
                e.preventDefault();
                var filterComponent = params.api.getFilterInstance(params.colDef.colId);
                that.filterText = null;
                params.api.onFilterChanged();
            });

关于javascript - ag-grid 自定义过滤器添加了一个清除过滤器按钮。 JS 不是 Angular,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53223450/

相关文章:

javascript回调模式使用简单的例子

ag-grid - 从农业网格中的回调更新单元格值

ag-grid - 有人有 AG-Grid 的法语翻译吗?

javascript - 渲染图表后,从图表对象更改 Highcharts 工具提示格式化程序

javascript - 实例化 View 后将 Backbone 模型分配给 View ?

javascript - 如何防止关闭的 </option> 标签被删除?

javascript - React js将分组列数组转换为普通数组

javascript - 是否可以使用 Ag Grid 进行垂直行分组?

ag-grid - 如何在 ag-grid 上显示数据之前对其进行格式化

vue.js - Ag-Grid 20.1.0 + Vuetify 中的垂直滚动问题