Sapui5 如何在JSON模型中连接两个sap.ui.model.Filter?
我有这样一个JSON模型:Sapui5 如何在JSON模型中连接两个sap.ui.model.Filter?,sapui5,Sapui5,我有这样一个JSON模型: { "VEHICLES": [ { "vehicleId": "0001", "routeName": "Ginza Line" }, { "vehicleId": "0002" "routeName": "Another Line" } } onSearch : function (oEvent)
{
"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型号,我错了。