jquery kendo 网格过滤器 属性 未定义

jquery kendo grid filter property is undefined

我有一个 jquery 函数,它应该根据被单击按钮的服务类型值过滤数据源。

我在 telerik 上使用这个 post 来获得我的指导:

Adding filters to Grid's source

据此,我创建了这个 buttonFilter() 函数:

function buttonFilter() {
    var buttonText = 'All';
    var button = $('#ReadTypeBtnGroup > button.btn.btn-default.active');
    if (button != null) {
        buttonText = button.val();
    }
    console.log('buttonFilter:: buttonText: ' + buttonText);
    var dataSource = $('#grid').data('kendoGrid').dataSource;
    if (dataSource.filter() != undefined) {
        dataSource.filter().length = 0; // remove any existing filters
    }
    if (buttonText != 'All') {
        dataSource.filter().push({ field: "serviceType", operator: 'eq', value: buttonText });
    }
    return buttonText;
}

我得到的错误是:

Uncaught TypeError: Cannot read property 'push' of undefined

filter() 属性 应该是个数组,但我不是很擅长 javascript 或者 jquery.

我做错了什么?

你搞错了。您不能更改过滤器属性以更改 filter() 方法的结果。相反,您必须使用它来传递参数。该方法只有 returns 个只读值。

示例:

var filters = dataSource.filter(); // Getting current filters 
dataSource.filter(null); // Clearing filters
dataSource.filter({ field: "abc", value: "1" }); // Setting new filters

Always check the docs

@Dontvotemedown 基本上是正确的,并且该答案对于您特别想做的事情非常有效(即完全清除过滤器并应用您自己的过滤器)。但是,如果您想手动将过滤器添加到现有过滤器,您的原始路径接近正确。我在最初的搜索中找到了 ,然后在我无法添加到未定义的过滤器时找到了这个。我添加过滤器的完整解决方案,可以添加到未定义的过滤器集,也可以与现有过滤器一起添加:

var grid = $("#ActivityGrid").data("kendoGrid");
var dataSource = grid.dataSource;
var gridFilter = dataSource.filter();
var upcomingFilter = {
    field: "ActivityDate",
    operator: "gte",
    value: new Date(),
    FilterName: "UpcomingOnly"
};
if ($("#UpcomingOnlyCheckbox")[0].checked) {
    if (gridFilter == undefined) {
        dataSource.filter(upcomingFilter);
    }
    else {
        gridFilter.filters.push(upcomingFilter);
        dataSource.filter(gridFilter);
    }

}