【问题标题】:jquery kendo grid filter property is undefinedjquery kendo 网格过滤器属性未定义
【发布时间】:2021-05-06 22:03:33
【问题描述】:

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

我使用 Telerik 上的这篇文章来获得我的指导:

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;
}

我得到的错误是:

未捕获的类型错误:无法读取未定义的属性“推送”

filter() 属性应该是一个数组,但对于 javascript 或 jquery,我并不擅长。

我做错了什么?

【问题讨论】:

    标签: javascript jquery kendo-ui kendo-grid


    【解决方案1】:

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

    例子:

    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

    【讨论】:

    • 有什么方法可以调试为什么它仍然不起作用?我没有错误,但网格仍然没有过滤。我应该创建一个新问题还是更新这个问题?
    • @jp2code 进行调试,您可以使用原始源(未缩小)版本,但我认为您不需要。您使用的是本地过滤还是远程过滤?
    • 嗯...本地?我在使用开发 SQL 服务器的开发 PC 上。是本地的吗?
    • @jp2code 不。本地是当您在 javascript 范围内加载数据(json)并将其传递给数据源时。远程是当您设置数据源以向 API 请求数据时。检查this out数据绑定部分之后的前两项,绑定到本地和远程数据,你会得到区别。无论如何,当它远程时,您可以检查 ajax 请求中的过滤器,看看是否有问题。当它是本地的时,它更容易,可能是你遗漏的一个小细节,因为它在内部进行了所有 javascript 过滤。
    • @jp2code 您可以在 dataSource 初始化参数中设置默认过滤器,或者您可以使用该方法在 数据加载后过滤。另一个问题,在远程加载数据后,当您过滤时,您想再次访问 API 还是使用之前加载的相同数据(在内存中)?
    猜你喜欢
    • 2014-02-18
    • 2014-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多