我有一些剑道网格和调度程序,我想应用一个复杂的过滤器,如((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
设置&#34;手动&#34;并在评论行的下方。手动设置按预期工作:但是,我不想这样做&#34;手动&#34;,显然。
注释行是我期望正常工作但会中断并打开kendo.all.min.js
文件并出现语法错误警告。
答案 0 :(得分:4)
尝试做:
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
}
]
}
]
}
]);
即。写一个带登录的第一个过滤器&#34; AND&#34;其中包含两个过滤器。这些过滤器中的每一个都具有&#34; OR&#34;过滤您想要的条件。
请记住: