UI5过滤同一列中的多个值

时间:2017-11-24 23:15:21

标签: javascript sapui5

我试图使用我桌子上的所有选定项目从odata模型中读取。该表有两个键,我称之为ID和NAME,可能是我只需要其中一个键的过滤器。仅使用1个过滤器不会改变结果。

然后,我为所有选定的项目创建过滤器。之后它使用过滤器从模型中读取,但总是返回1个结果,即表中的第一个条目。

我发现here您可以使用过滤器数组制作另一个过滤器,以便对过滤器执行AND或OR,所以我尝试了但没有改变。

var table = this.byId("table");
var items = table.getSelectedItems();
var filters = [];
for (var i = 0; i < items.length; i++) {
    var item = items[i].getBindingContext().getObject();
    var id = new Filter("ID", FilterOperator.Contains, item.ID);
    var name = new Filter("NAME", FilterOperator.Contains, item.NAME);
    filters.push(id);
    filters.push(name);
}

var model = this.getOwnerComponent().getModel();
model.read("/assessments", {
    filters: [new sap.ui.model.Filter(filters, false)],
    success: function(odata) {
        var results = odata.results;
    }
}

1 个答案:

答案 0 :(得分:1)

从我可以理解的问题来看,我相信你想实现如下

第1行 - “ID”和“NAME”

第2行 - “ID”和“NAME”

第3行 - “ID”和“NAME”

您可以通过在嵌套过滤器中设置参数对象中的and参数来实现。

var table = this.byId("table"),
    items = table.getSelectedItems(),
    aFilters = [];
for (var i = 0; i < items.length; i++) {
    var item = items[i].getBindingContext().getObject();
    var oFilter = new Filter({
        filters:[
            new Filter("ID", FilterOperator.Contains, item.ID),
            new Filter("NAME", FilterOperator.Contains, item.NAME)
        ],
        and : true
    })
    aFilters.push(oFilter);
}

var model = this.getOwnerComponent().getModel();
model.read("/assessments", {
    filters: [new sap.ui.model.Filter(aFilters, false)],
    success: function(odata) {
        var results = odata.results;
    }
}