我目前正在尝试使用/在SAPUI5中的一些内容,并且我已经实现了一个非常简单的搜索:
var filters = [];
var query = evt.getParameter("query");
if (query && query.length > 0) {
var nameFilter = new sap.ui.model.Filter("name", sap.ui.model.FilterOperator.Contains, query);
filters.push(nameFilter);
}
var list = this.getView().byId("list");
var binding = list.getBinding("items");
binding.filter(filters);
现在我有以下问题:通过这个逻辑,我可以通过一个人的名字来搜索,或者更确切地说过滤。我还有一些其他领域,如年龄,性别等,我也希望搜索年龄或性别。 所以我试图创建第二个过滤器,比如" genderFilter",它正在使用"性别"领域。在此之后,使用.push()方法将第二个过滤器添加到过滤器[] ..但这不起作用。
我已经尝试过观看文档,看了不同的例子,尝试了不同的方式 - 但我无助。有人可以帮我解决这个问题吗?
答案 0 :(得分:6)
对于要求,此代码将起作用。
var list = this.getView().byId("list");
var binding = list.getBinding("items");
if( !query ) {
binding.filter( [] );
}
else {
binding.filter( [ new sap.ui.model.Filter([
new sap.ui.model.Filter("name", sap.ui.model.FilterOperator.Contains, query ),
new sap.ui.model.Filter("gender", sap.ui.model.FilterOperator.Contains, query )
],false)
]
答案 1 :(得分:3)
根据API
对于手动过滤,您应始终传递FilterType
如果您将代码更改为
list.getBinding("items").filter(filters, sap.ui.model.FilterType.Application);
它应该有用。
另请参见最底部的https://openui5.hana.ondemand.com/docs/guide/BindingAggregations.html。
答案 2 :(得分:3)
我用以下代码实现了这个目标: -
var oFilter = new sap.ui.model.Filter("name",sap.ui.model.FilterOperator.Contains,searchString);
var oFilter1 = new sap.ui.model.Filter("ID",sap.ui.model.FilterOperator.Contains,searchString);
var comFil = new sap.ui.model.Filter([oFilter,oFilter1]);
var oList = sap.ui.getCore().byId("dealerList");
oList.getBinding("items").filter(comFil,sap.ui.model.FilterType.Application);
答案 3 :(得分:1)
每个条件的filters
数组中只有一个过滤器,它应该有效,
var filters = [];
var sFilter;
var query = evt.getParameter("query");
if (query && query.length > 0) {
if(query == "name" )
{
sFilter = new sap.ui.model.Filter("name", sap.ui.model.FilterOperator.Contains, query);
}
else if(query == "gender")
{
sFilter = new sap.ui.model.Filter("gender", sap.ui.model.FilterOperator.Contains, query);
}
//and so on...
filters.push(sFilter);
}
var list = this.getView().byId("list");
var binding = list.getBinding("items");
binding.filter(filters);
答案 4 :(得分:1)
我希望我把一切都做对了: 以下是将数据绑定到表时如何过滤多个列:
oTable.bindRows({
path : "/modelData",
filters: [new sap.ui.model.Filter("severity", sap.ui.model.FilterOperator.EQ, '2'),
new sap.ui.model.Filter("severity", sap.ui.model.FilterOperator.EQ, '3')]
});
答案 5 :(得分:1)
组合多个过滤器,您可以这样编写过滤器:
new sap.ui.model.Filter({
filters: [
new sap.ui.model.Filter(col1, , ,val),
new sap.ui.model.Filter(col2, , ,val)
],
and: false
})
来源:https://sapui5.hana.ondemand.com/docs/api/symbols/sap.ui.model.Filter.html#constructor
然后,您可以使用OR过滤多个列。
答案 6 :(得分:0)
我不得不同时使用它们。所以最后这对我有用。
var oFilters = new sap.ui.model.Filter({
filters: [
oFilter,
oFilter2
],
and: false
});
evt.getSource().getBinding("items").filter(oFilters, sap.ui.model.FilterType.Application);
感谢您的帮助!
答案 7 :(得分:0)
<TableHeaderColumn dataField='effectiveDate' dataSort={true} dataFormat={dateFormatter} >Effective Date</TableHeaderColumn>
答案 8 :(得分:0)
绑定两个或多个过滤器的简单方法。
var sQuery = oEvent.getParameter("value");
var oBinding = oEvent.getSource().getBinding("items");
oBinding.filter([
new sap.ui.model.Filter("column A", sap.ui.model.FilterOperator.Contains, sQuery),
new sap.ui.model.Filter("column B", sap.ui.model.FilterOperator.Contains, sQuery)
]);