SAPUI5:如何筛选具有2个或更多值的数据
我目前正在尝试SAPUI5中的一些东西,我实现了一个非常简单的搜索,如下所示:SAPUI5:如何筛选具有2个或更多值的数据,sapui5,Sapui5,我目前正在尝试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, qu
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”,它使用“gender”字段。在此之后,使用.push()方法将第二个筛选器添加到筛选器[]……但这不起作用
我已经试着看了文档,看了不同的例子,尝试了不同的方法——但我无能为力。有人能帮我解决这个问题吗 根据API
对于手动筛选,您应始终通过FilterType
如果您将代码更改为
list.getBinding("items").filter(filters, sap.ui.model.FilterType.Application);
它应该会起作用
另请参见最底部。对于每个条件,在
过滤器
数组中只有一个过滤器,它应该可以工作
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);
我希望我把一切都做好了: 以下是将数据绑定到表时如何过滤多个列:
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')]
});
对于要求,此代码将起作用
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)
]
我通过以下代码实现了这一点:-
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);
要组合多个过滤器,您必须按以下方式编写过滤器:
new sap.ui.model.Filter({
filters: [
new sap.ui.model.Filter(col1, , ,val),
new sap.ui.model.Filter(col2, , ,val)
],
and: false
})
资料来源:
然后,您可以使用或在多个列中进行筛选。我必须同时使用这两个选项。所以最后这对我来说很有效
var oFilters = new sap.ui.model.Filter({
filters: [
oFilter,
oFilter2
],
and: false
});
evt.getSource().getBinding("items").filter(oFilters, sap.ui.model.FilterType.Application);
谢谢你的帮助 绑定两个或多个筛选器的简单方法
var afilters = [];
var query = evt.getParameter("query");
afilters.push(new sap.ui.model.Filter("name", sap.ui.model.FilterOperator.Contains, query);
afilters.push(new sap.ui.model.Filter("age", sap.ui.model.FilterOperator.Contains, query);
var list = this.getView().byId("list");
var binding = list.getBinding("items");
binding.filter(new sap.ui.model.Filter({filters: afilters, and: true|false}));
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)
]);
你好,谢谢你。但我还是有问题。这正在工作:var oFilter1=新过滤器(“名称”,FilterOperator.Contains,query);var list=this.getView().byId(“list”);list.getBinding(“items”).filter([oFilter1],FilterType.Application);但是使用第二个,它就不再工作了:var filter1=newfilter(“name”,FilterOperator.Contains,query);var filter2=新过滤器(“姓氏”,FilterOperator.Contains,query);var list=this.getView().byId(“list”);list.getBinding(“items”).filter([filter1,filter2],FilterType.Application);这里怎么了?谢谢,AlexOh该死的…我不能在8个小时内“问”这个问题,因为代码块和注释的格式都很糟糕..嗨,你能试试
.bindAggregation(“items”,“path:/”,filters:[oFilter1,oFilter2]})代码>您好,我认为list.getBinding(“items”).filter([oFilter1,oFilter2]);正在工作,但使用此查询必须同时使用两个值(名称和姓氏)。有没有一种方法可以提供一个OR关系而不是and?谢谢,我不确定这是否可能,而且这甚至可能不是用户所期望的;使用多个筛选器比使用单个筛选器提供更多的结果…嘿,谢谢你的回答-但是我如何检测查询是名称还是性别?因为就像你写的那样,它不应该起作用——但我认为这个想法还不错。我只想用一个查询提供对多个字段的搜索。这个“query”变量中到底有什么,您是如何得到它的?这个“query”变量是searchfield的值,或者更确切地说是searchquery文本为什么不使用searchfield呢?使用类似于此处给出的内容,尝试过此方法,但它总是返回$batch requests must be POST
错误,有什么想法吗?请解释一下您是如何得到此错误的完整场景。是在oData呼叫期间还是仅在设置过滤器期间。谢谢~我已经解决了!这是因为我在datetime类型的数据中使用了这个,多么愚蠢!我在这里描述了它:感谢您提供这段代码片段,它可能会提供一些有限的、即时的帮助。A通过展示为什么这是一个很好的解决问题的方法,并将使它对未来有其他类似问题的读者更有用。请在你的答案中添加一些解释,包括你所做的假设。这个答案与其他建议相同的答案有何不同?这是正确的!(尽管它似乎是在自己的结果之上应用sap.ui.model.Filter的。)