如何在JSON模型中连接两个sap.ui.model.Filter?

时间:2017-04-18 08:24:40

标签: sapui5

我有一个像这样的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

https://openui5.hana.ondemand.com/#docs/guide/96804e3315ff440aa0a50fd290805116.html#loio50357d719b35439984348080bcbb14a4

https://github.com/SAP/openui5/issues/1442

3 个答案:

答案 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());
});

它正在工作!