Javascript 剑道UI按字段清除过滤器

Javascript 剑道UI按字段清除过滤器,javascript,kendo-ui,grid,datasource,Javascript,Kendo Ui,Grid,Datasource,我的页面上有剑道格网。该网格具有数据源。在这个数据源中,我有一系列复杂的过滤器。例如: 在向数据源过滤器添加新的过滤器集之前,我需要删除所有过滤器,例如field=“fld_32” 我认为可以通过递归来实现这一点,但在网格上有一个过滤器组件,它具有按钮“清除”,按钮清除可以完成我需要的相同操作。但是我不知道它是如何工作的,也不知道如何通过编程调用它。您所需要做的就是使用这个函数。这将清除所有过滤器: function clearFiter() { $("form.k-filter-me

我的页面上有剑道格网。该网格具有数据源。在这个数据源中,我有一系列复杂的过滤器。例如:

在向数据源过滤器添加新的过滤器集之前,我需要删除所有过滤器,例如field=“fld_32”


我认为可以通过递归来实现这一点,但在网格上有一个过滤器组件,它具有按钮“清除”,按钮清除可以完成我需要的相同操作。但是我不知道它是如何工作的,也不知道如何通过编程调用它。

您所需要做的就是使用这个函数。这将清除所有过滤器:

function clearFiter() {
    $("form.k-filter-menu button[type='reset']").trigger("click");
}

我通过擦除网格中所有过滤器的方法扩展了kendoGrid:

kendo.ui.Grid.prototype.clearFilters = function(args){
// MODIFY THIS PART
    var ignore = [];
    // test arguments
    if(typeof args === 'object'){
        if(args.hasOwnProperty('ignore')){
            if(args.ignore.length > 0){
                ignore = args.ignore;
            }
        }
    }

// get dataSource of grid and columns of grid
var fields = [], filter = this.dataSource.filter(), col = this.columns;
if( $.isEmptyObject(filter) || $.isEmptyObject(filter)) return;

// Create array of Fields to remove from filter and apply ignore fields if exist
for(var i = 0, l = col.length; i < l; i++){
    if(col[i].hasOwnProperty('field')){
        if(ignore.indexOf(col[i].field) === -1){
            fields.push(col[i].field)
        }
    }
}
// MODIFY THIS PART END

if($.isEmptyObject(fields)) return;

// call "private" method
var newFilter = this._eraseFiltersField(fields, filter)

// set new filter
this.dataSource.filter(newFilter);
}
kendo.ui.Grid.prototype.clearFilters=函数(args){
//修改此部分
var ignore=[];
//测试参数
if(参数类型=='object'){
if(args.hasOwnProperty('ignore')){
如果(args.ignore.length>0){
ignore=args.ignore;
}
}
}
//获取网格的数据源和网格的列
var fields=[],filter=this.dataSource.filter(),col=this.columns;
if($.isEmptyObject(筛选器)|$.isEmptyObject(筛选器))返回;
//创建要从筛选器中删除的字段数组,并应用忽略字段(如果存在)
for(变量i=0,l=col.length;i
这是第二种方法。它是分开的,因为它可以递归调用:

kendo.ui.Grid.prototype._eraseFiltersField = function(fields, filter){
    for (var i = 0; i < filter.filters.length; i++) {
    // For combination 'and' and 'or', kendo use nested filters so here is recursion
    if(filter.filters[i].hasOwnProperty('filters')){
        filter.filters[i] = this._eraseFiltersField(fields, filter.filters[i]);
        if($.isEmptyObject(filter.filters[i])){
            filter.filters.splice(i, 1);
            i--;
            continue;
        }
    }

    // Remove filters
    if(filter.filters[i].hasOwnProperty('field')){
        if( fields.indexOf(filter.filters[i].field) > -1){
            filter.filters.splice(i, 1);
            i--;
            continue;
        }
    }
}

if(filter.filters.length === 0){
    filter = {};
}

return filter;
}
kendo.ui.Grid.prototype.\u橡皮擦过滤器字段=函数(字段,过滤器){
对于(变量i=0;i-1){
滤波器。滤波器。拼接(i,1);
我--;
继续;
}
}
}
if(filter.filters.length==0){
过滤器={};
}
回流过滤器;
}
对于您的问题,您可以修改clearFilters方法,将要从筛选器中删除的字段的名称(“fld_32”)作为参数。然后可以将此字段插入到_eraseFiltersField参数中,而不是插入网格的文件