所以我有一个列表,但是我想过滤掉类型'05'
或'01'
而不显示在列表中。以下代码对'05'
有效,但对'01'
无效。我将如何编写它以添加另一个值?
items="{
path: 'Entries',
filters: [{
path: 'Type',
operator : 'NE',
value1 : '05',
value2: '01'
}]
}"
我尝试了这种方法,我认为这是合乎逻辑的方法,但是随后它开始显示05和01。因此,我假设这是使用 OR 过滤器,而不是过滤器 AND 过滤器组合。
items="{
path:'Entries',
filters: [{
path: 'Type',
operator: 'NE',
value1: '05'
}, {
path: 'Type',
operator: 'NE',
value1: '01'
}]
}
答案 0 :(得分:2)
这是XML视图中的语法:
items="{
path: '/Products',
filters: [
{
filters: [
{
path: 'ProductName',
operator: 'StartsWith',
value1: 'Sir '
},
{
path: 'Discontinued',
operator: 'EQ',
value1: false
},
],
and: true
}
]
}"
工作示例:https://embed.plnkr.co/wAlrHB?show=view/Home.view.xml,preview
参数filters
等待一组过滤器信息对象。过滤器信息对象受以下属性组合的约束:
path
,operator
,value1
(和value2
(如果适用))filters
和and
。 <-这就是我们所需要的。 API参考:sap.ui.model.Filter
第二种方法不起作用的原因是,两个过滤器都指向同一路径('Type'
),这导致OR逻辑。
应用于单个表列的所有过滤器都进行“或”运算,而对不同表列中的过滤器进行“与”运算。请使用过滤器的自动分组(在适用的情况下)或使用显式的AND / OR过滤器,不支持两者的混合。 [source]
答案 1 :(得分:1)
与sap.ui.model.Filter
一起使用的value2
参数仅对某些sap.ui.model.FilterOperators
(例如BT
)有效。要解决此问题,我们可以设置多个sap.ui.model.FilterOperator.NE
过滤器,在您的情况下,可以为值1和2过滤属性"Type"
。
默认情况下,如果您将多个过滤器组合在一起,它们在逻辑上与OR
组合在一起,那么在您进行EQ
过滤器时是有意义的,但对于必须使用NE
过滤器的情况则没有意义使用AND
。幸运的是,sap.ui.model.Filter
类具有一个参数,让我们定义它。
在我的示例中,我有一个sap.m.Table
,该绑定到以下“水果”对象:
var Fruits = {
"Fruits": [{
"id": "1",
"name": "Apple"
}, {
"id": "2",
"name": "Blueberry"
}, {
"id": "3",
"name": "Cranberry"
}]
};
就像您的问题一样,我想从表中同时过滤"id"
1和2。这可以通过以下方法实现:
var oTable = this.getView().byId("idListFruits");
oTable.getBinding("items").filter(new Filter({
filters: [
new Filter({
filters: [
new Filter("id", sap.ui.model.FilterOperator.NE, "1"),
new Filter("id", sap.ui.model.FilterOperator.NE, "2")
], and: true
})
]
}));
通过这种方式,我既可以将NE
过滤器应用于表,也可以将AND
参数设置为true,以指示对过滤器应用了“ AND”逻辑结合。
我的表格输出: