我有这样的JSON模型:
{
"VEHICLES": [
{
"vehicleId": "0001",
"routeName": "Ginza Line"
},
{
"vehicleId": "0002"
"routeName": "Another Line"
}
}
我正在实现这样的类型函数:
onSearch : function (oEvent) {
var sQuery = oEvent.getParameter("query");
if (sQuery) {
var oFilter1 = new Filter("vehicleId", function(value) {
return value.includes("sQuery");
});
var oFilter2 = new Filter("routeName", function(value) {
return value.includes("sQuery");
});
var allFilter = new Filter([oFilter1, oFilter2], false});
var list = this.getView().byId("masterList");
list.getBinding("items").filter(allFilter);
}
}
当我在搜索字段中输入" 000"时,我期望返回两个数据项,但它不会返回。为什么?
我尝试了单个" parterid"过滤器,它起作用。
我也尝试了
var allFilter = new Filter({
filters: [oFilter1, oFilter2],
and: false //OR
});
但是Allfilter.band返回undefined
,我很困惑。
参考:
https://openui5.hana.ondemand.com/#docs/api/symbols/sap.ui.model.filter.filter.html
https://github.com/sap/openui5/issues/1442
有一个小错误。您正在检查vehicleId
是否包含字符串"sQuery"
。删除围绕 squery 的引号,过滤器可以正常工作。
value.includes(sQuery);
感谢@boghyon和@suryabhan Mourya,我将fnTest
功能更改为
var oFilter1 = new Filter("vehicleId", function(value) {
return value.includes(sQuery.toUpperCase());
});
它正在工作!
更新:
根据API文档。将参数放在数组
list.getBinding("items").filter([allFilter]);
@boghyon从这里的源代码中找到它实际上被转换为数组