此处提供在页面上添加过滤器和搜索栏功能的功能
我无法理解给定的onFilterInvoices
,用于过滤在屏幕上显示的列表的功能。
#InvoiceList.controller.js
sap.ui.define([
"sap/ui/core/mvc/Controller",
"sap/ui/model/json/JSONModel",
"../model/formatter",
"sap/ui/model/Filter",
"sap/ui/model/FilterOperator"
], function (Controller, JSONModel, formatter , Filter, FilterOperator) {
"use strict";
return Controller.extend("Workspace.controller.InvoiceList", {
formatter: formatter,
onInit : function () {
var oViewModel = new JSONModel({
currency: "EUR"
});
this.getView().setModel(oViewModel, "view");
},
onFilterInvoices : function (oEvent) {
var aFilter = [];
var sQuery = oEvent.getParameter("query");
if (sQuery) {
aFilter.push(new Filter("ProductName", FilterOperator.Contains, sQuery));
}
var oList = this.byId("invoiceList");
var oBinding = oList.getBinding("items");
oBinding.filter(aFilter);
}
});
});
您可以参考Filtering代码
答案 0 :(得分:0)
让我尝试解释一下。首先,请阅读:sap.ui.model.Filter
让我们看看:
new Filter("ProductName", FilterOperator.Contains, sQuery)
过滤器需要三件事:
何处寻找数据。
如何寻找到的数据。
什么寻找到的数据。
让我们应用这个:
因此,我们创建过滤器,
将在绑定到我们列表的模型中寻找属性ProductName
(存储产品名称)。
现在,它需要知道外观。基本上就是操作。这些操作可以是contains
,equals
,greater than
,less than
等,所以我们说,
if ( ProductName.indexOf() > -1 ) {
return ProductName;
}
要在数据中查找的内容(用户在搜索输入框中输入的内容)。您可以在上面的代码中,indexOf
需要一个参数。 sQuery
是该参数。所以,让我们完成我们的代码:
if ( ProductName.indexOf(sQuery) > -1 ) {
return ProductName;
}
上面的语句对模型中的所有元素执行一次(更多内容在下文中),因此,只要满足以上条件,返回的元素和元素便会绑定到列表。
这里有两点要考虑:
console.log(oList.getBinding("items"));
oList.getBinding('items')
。
现在,将码:oBinding.filter(aFilter);
。
它调用了UI5 API:嗨,我想将过滤器应用于此特定列表绑定(仅显示匹配项)。这是filter(array)作为参数。 UI5然后执行过滤器,更新UI。
希望这会有所帮助。