我正在尝试仅在列表中显示唯一值。这些值从以下JSON模型加载,我需要使用所有唯一名称填充List:
{"Customers": [
{"name": "Customer A","age": "30"},
{"name": "Customer B","age": "25"},
...
]}
在搜索可能的解决方案时,我遇到了sap.m.ListBinding类及其函数getDistinctValues(sPath)
>> see API
此函数应从给定的相对路径返回不同值的数组。我尝试过以下方式使用该功能:
var oModel = this.getView().getModel("customers"),
oListBinding = new ListBinding(oModel, "customers>Customers", oModel.getContext("/Customers")),
arrValues = oListBinding.getDistinctValues("name");
但我一直得到arrValues=null
。我在这里做错了什么想法?
我也尝试过使用customers>name
,customers>/name
和/name
而没有任何运气。
答案 0 :(得分:0)
如果getDistinctValues()使您失败,或者您需要测量多个属性的清晰度,则可能会使用下面的技术。虽然这个用例是针对输入框的建议,但我提供了该技术:
handleSuggestClient: function(oEvent){
var sValue = oEvent.getParameter("suggestValue");
var filters = [];
var uniqueNames = [];
filters = [new sap.ui.model.Filter([
new sap.ui.model.Filter("", function(oNode) { // blank first param passes in entire node to test function
var sVal = ((oNode.client + oNode.contact) || "").toUpperCase()
if (uniqueNames.indexOf(sVal) === -1){
uniqueNames.push(sVal);
return sVal.indexOf(sValue.toUpperCase()) > -1;
} else {
return false;
}
})
], false)];
this.oSFClient.getBinding("suggestionItems").filter(filters);
this.oSFClient.suggest();
},
传递给过滤器构造函数的函数包括测试唯一性的逻辑,并为数组添加匹配等。
如果离开主题,请告诉我,我会删除答案。