如何在JSON模型中加入两个SAP.UI.Model.Filter



我有这样的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从这里的源代码中找到它实际上被转换为数组

最新更新