我想实现下面的地方条件.如何在UI5中创建过滤器?
field-A NE 'O' and ( field-B contains 'search-text' or field-C contains 'search-text' )
后端业务场景:
field-A NE 'O'
绑定列表时应用过滤器. ( field-B contains 'search-text' or field-C contains 'search-text' )
以在搜索字段上实现搜索功能.过滤实例:
new sap.ui.model.Filter("field-A", sap.ui.model.FilterOperator.NE, "O");
new sap.ui.model.Filter("field-B", sap.ui.model.FilterOperator.contains, search-text);
new sap.ui.model.Filter("field-C", sap.ui.model.FilterOperator.contains, search-text);
Run Code Online (Sandbox Code Playgroud)
以下是使用Northwind的OData组合多个过滤器的最小示例:https://embed.plnkr.co/AoIZI4/.完整列表可以在这里找到.
当实例化的过滤器,来代替path
,operator
以及value1
,使用属性filters
和and
如图所示的多个过滤器组合API参考.
在我们的例子中,我们定义了三个过滤器
Filter
也用于上面的Plunker示例中的初始绑定(过滤器1)field-A NE 'O'
含义and: false
(过滤器2).过滤器1:
getInitialFilter: function() {
return new Filter("Field-A", FilterOperator.NE, "O");
},
Run Code Online (Sandbox Code Playgroud)
过滤器2:
getSearchFilters: function(query) {
return new Filter({
filters: [
new Filter("Field-B", FilterOperator.Contains, query),
new Filter("Field-C", FilterOperator.Contains, query),
],
and: false,
});
},
Run Code Online (Sandbox Code Playgroud)
最后,当用户输入搜索查询时,我们将这两个过滤器与OR
应用于ODataListBinding相结合.
onSearch: function(event) {
this.byId("myList").getBinding("items").filter(new Filter({
filters: [
this.getInitialFilter(),
this.getSearchFilters(event.getParameter("query")),
],
and: true,
}), FilterType.Application);
},
Run Code Online (Sandbox Code Playgroud)