我想为具有多个条件的数据源构建过滤器。我找到了这个线程( HERE ),那里的人有几乎相同的问题,但我想在我的两个操作之间进行 OR 而不是 AND 。
有我到目前为止的代码:
var filter = { logic: "OR", filters: [] };
var filterProduct = { logic: "AND", filters: [] };
var supplierValue = dropdownSupplier.value();
if (supplierValue != "00000000-0000-0000-0000-000000000000") {
filterProduct.filters.push({ field: "SupplierId", operator: "eq", value: supplierValue });
}
var categoryValue = dropdownCategory.value();
if (categoryValue != "00000000-0000-0000-0000-000000000000") {
filterProduct.filters.push({ field: "CategoryId", operator: "eq", value: categoryValue });
}
var typeValue = dropdownType.value();
if (typeValue != "00000000-0000-0000-0000-000000000000") {
filterProduct.filters.push({ field: "TypeId", operator: "eq", value: typeValue });
}
var filterSelect = { logic: "OR", filters: [] };
filterSelect.filters.push({ field: "Id", operator: "eq", value: "00000000-0000-0000-0000-000000000000" });
filter.filters.push(filterProduct);
filter.filters.push(filterSelect);
dropdownProduct.dataSource.query({ filter: filter });
事实上,我想要做的是: (filterProduct) OR (filterSelect) 但如果我不在变量过滤器中使用“逻辑”,过滤器将是“与”。
非常感谢
编辑:有一个 jsFiddle 接近我想要做的,但使用“AND”:Example在这个例子中,过滤器是:
[ {[ Freight = 11.61 OR Freight = 51.30 ]} AND {[ City startswith "Charleroi"]} ]
但我想有类似的东西:
[ {[ 运费 = 11.61 或运费 = 51.30 ]} 或 {[ 城市以“沙勒罗瓦”开头 ]} ]
最佳答案
最终代码正常工作:
关键字 AND 和 OR 需要小写,我不需要使用变量 filterSelect
var filter = { logic: "or", filters: [] }; var filterProduct = { logic: "and", filters: [] }; var supplierValue = dropdownSupplier.value(); if (supplierValue != "00000000-0000-0000-0000-000000000000") { filterProduct.filters.push({ field: "SupplierId", operator: "eq", value: supplierValue }); } var categoryValue = dropdownCategory.value(); if (categoryValue != "00000000-0000-0000-0000-000000000000") { filterProduct.filters.push({ field: "CategoryId", operator: "eq", value: categoryValue }); } var typeValue = dropdownType.value(); if (typeValue != "00000000-0000-0000-0000-000000000000") { filterProduct.filters.push({ field: "TypeId", operator: "eq", value: typeValue }); } if (filterProduct.filters.length > 0) { filter.filters.push(filterProduct); } filter.filters.push({ field: "Id", operator: "eq", value: "00000000-0000-0000-0000-000000000000" }); dropdownProduct.dataSource.query({ filter: filter });
关于datasource - 多条件剑道数据源过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14203509/