我有一个像这样的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”时,我希望返回两个数据项,但它不返回任何数据项。为什么?
我尝试过单个“vehicleId”过滤器,它有效。
我也试过
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.html
答案 0 :(得分:1)
有一个小错误。您正在检查vehicleId
includes字符串"sQuery"
是否正确。删除 sQuery 周围的引号,过滤器将正常工作。
value.includes(sQuery);
答案 1 :(得分:0)
更新
根据API document。将参数放入Array
list.getBinding("items").filter([allFilter]);
@boghyon从源代码here中发现它实际上已转换为数组
答案 2 :(得分:0)
感谢@boghyon和@suryabhan mourya,我将fnTest
函数更改为
var oFilter1 = new Filter("vehicleId", function(value) {
return value.includes(sQuery.toUpperCase());
});
它正在工作!