【发布时间】:2015-01-28 17:22:49
【问题描述】:
我有一些 Kendo Grid 和 Scheduler,我想应用一个复杂的过滤器,例如((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 设置为“手动”,并且位于注释行的下方。手动设置按预期工作:但是,显然我不想“手动”执行此操作。
注释行是我预期的,但会中断并打开 kendo.all.min.js 文件并显示语法错误警报。
【问题讨论】:
标签: javascript kendo-ui telerik kendo-grid