Kendo 数据源的复杂过滤

Complex filtering on Kendo Datasources

我有一些 Kendo 网格和调度程序,我想应用一个复杂的过滤器,例如((A 或 B 或 C)和(D 或 E))。如果过滤器很简单,比如(A 或 B 或 C),一切都可以,但是对于第一个提到的复杂类型的过滤器,我无法实现它。

这是我尝试过的方法:

function filterByTechnicalAndStatus() {
    var allFilters = [];
    var technicalFilters = { logic: "or", filters: [] };
    var statusFilters = { logic: "or", filters: [] };
    var scheduler = $("#scheduler").data("kendoScheduler");
    var userGrid = $("#userGrid").data("kendoGrid");
    var selectedUsers = userGrid.select();
    if (selectedUsers.length != 0) {
        for (var i = 0; i < selectedUsers.length; i++) {
            var code = userGrid.dataItem(selectedUsers[i]).Code;
            technicalFilters.filters.push({ field: "Technical", operator: "eq", value: code });
        }
    }
    if ($('#chk_PL').prop('checked')) {
        statusFilters.filters.push({ field: "InspectionStatusCode", operator: "eq", value: "PL" });
    }
    if ($('#chk_OPEN').prop('checked')) {
        statusFilters.filters.push({ field: "InspectionStatusCode", operator: "eq", value: "OPEN" });
    }
    if ($('#chk_EXEC').prop('checked');) {
        statusFilters.filters.push({ field: "InspectionStatusCode", operator: "eq", value: "EXEC" });
    }

    allFilters.push(statusFilters);
    allFilters.push(technicalFilters);

    scheduler.dataSource.filter(
        [
            { "logic": "or",
                "filters": [
                            { "field": "InspectionStatusCode", "operator": "eq", "value": "PL" },
                            { "field": "InspectionStatusCode", "operator": "eq", "value": "OPEN" }
                            ]
            },
            { "logic": "or",
                "filters": [
                            { "field": "Technical", "operator": "eq", "value": "PSOARES" },
                            { "field": "Technical", "operator": "eq", "value": "ASOARES" }
                            ]
            }
        ]
    );
    //scheduler.dataSource.filter(allFilters);
    }

在上述函数的末尾,我设置了 scheduler.dataSource.filter 设置 "manually" 并在注释行下方。手动设置按预期工作:但是,显然我不想这样做 "manually"。

注释行是我期望的正常工作但中断并打开 kendo.all.min.js 文件并显示语法错误警报。

我找到了 this and this 但无法解决我的问题。如何设置 "manually" 以外的复杂过滤器?

尝试做:

ds.filter([
    {
        "logic":"and",
        "filters":[
            {
                "logic":"or",
                "filters":[
                    // Your A condition
                    { "field": "InspectionStatusCode", "operator": "eq", "value": "PL" },
                    // Your B condition
                    { "field": "InspectionStatusCode", "operator": "eq", "value": "OPEN" }
                    {
                        // Your C condition
                    }
                ]
            },
            {
                "logic":"or",
                "filters":[
                    {
                        // Your D condition
                    },
                    {
                        // Your E condition
                    }
               ]
            }
        ]
    }
]);

即使用 login "AND" 编写第一个过滤器,其中包含两个过滤器。这些过滤器中的每一个都具有 "OR" 符合您想要的条件的过滤器。

记住: