我正在使用sap.ui.table.Table开发一个sap ui5应用程序。
我需要应用基于多个字符串的过滤器。例如,如果用户输入是如下数组:
["Stack", "Overflow"]
我需要:
"Stack"
; 1
; "Overflow"
的结果
醇>
结果将是包含"Stack"
和"Overflow"
的所有行,无论字段是什么。
有没有人有解决方案?
答案 0 :(得分:1)
根据sap.ui.model.Filter documentation,您可以根据过滤器信息对象或先前创建的过滤器数组创建过滤器。这允许我们执行以下操作:
让我们来看看一些代码。
// We will only display rows where ProductName contains
// "Stack" AND CustomerName equals "Overflow"
var oFilterForProductName,
oFilterForCustomerName,
aArrayWhichContainsBothPreviousFilters = [],
oFilterToSetOnTheTable;
var sValueToFilterTheProductNameOn = "Stack",
sValueToFilterTheCustomerNameOn = "Overflow";
var sKeyForProductNameInTheTableModel = "ProductName",
sKeyForCustomerNameInTheTableModel = "CustomerName";
var oTableToFilter = this.byId("myTableId");
// Step 1: create two filters
oFilterForProductName = new sap.ui.model.Filter(
sKeyForProductNameInTheTableModel,
sap.ui.model.FilterOperator.Contains,
sValueToFilterTheProductNameOn);
oFilterForCustomerName = new sap.ui.model.Filter(
sKeyForCustomerNameInTheTableModel,
sap.ui.model.FilterOperator.EQ,
sValueToFilterTheCustomerNameOn);
// Step 2: add these two filters to an array
aArrayWhichContainsBothPreviousFilters.push(oFilterForProductName);
aArrayWhichContainsBothPreviousFilters.push(oFilterForCustomerName);
// Step 3: create a filter based on the array of filters
oFilterToSetOnTheTable = new sap.ui.model.Filter({
filters: aArrayWhichContainsBothPreviousFilters,
and: true
});
oTableToFilter.getBinding("items").filter(oFilterToSetOnTheTable , sap.ui.model.FilterType.Application);
希望这会有所帮助。如果您有任何问题,请告诉我。
克里斯
答案 1 :(得分:0)
请在for循环中传递该数组并传递过滤器,如
var tableId = this.byId("oTable");
for(var i=0;i < array.length ; i++)
{
oTable.getBinding().filter(new sap.ui.model.Filter("", sap.ui.model.FilterOperator.Contains, array[0]));
}
它可能对您有所帮助。