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

Sapui5 如何在JSON模型中连接两个sap.ui.model.Filter?,sapui5,Sapui5,我有这样一个JSON模型: { "VEHICLES": [ { "vehicleId": "0001", "routeName": "Ginza Line" }, { "vehicleId": "0002" "routeName": "Another Line" } } onSearch : function (oEvent)

我有这样一个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);
    } 
}
我正在实现一个排序函数,如下所示:

{
    "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返回的
未定义
,我感到困惑

参考:

更新:

根据API。将参数放入数组

list.getBinding("items").filter([allFilter]);

@boghyon从源代码中发现,它实际上被转换为数组,这有一个小错误。您正在检查
车辆ID
字符串是否为
“sQuery”
。删除sQuery周围的引号,过滤器就会正常工作

value.includes(sQuery);

多亏了@boghyon和@suryabhan mourya,我将
fnTest
函数改为

var oFilter1 = new Filter("vehicleId", function(value) {
    return value.includes(sQuery.toUpperCase());
});

它正在工作

其实这并不重要,因为如果它还没有在里面的话。很好的发现@boghyonThanks!它起作用了!我发现
routeName
中的搜索不起作用,然后我发现fnTest函数捕获的所有
value
都是大写的。你知道为什么吗?@Tina:如果我们跟踪回调跟踪,我们可以看到字符串值正在被调用(该FilterProcessor由我们的ListBinding模块调用)。依我看,这个行为应该在API参考中的某个地方记录下来,但它不在那里。上面的代码只是一个简单的例子吗?否则,在这种情况下,应使用新过滤器(“vehicleId”、FilterOperator.Contains、sQuery),而不是自定义过滤器功能。这是一个例子。UI5将负责规范化和大写搜索查询,这使得过滤更容易,更不容易出错。@boghyon,是的,这也行!我以为
FilterOperator.Contains
只适用于odata型号,我错了。