在sap.m.List中显示唯一值

时间:2016-11-14 23:06:48

标签: sapui5 jsonmodel

我正在尝试仅在列表中显示唯一值。这些值从以下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>namecustomers>/name/name而没有任何运气。

1 个答案:

答案 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();
    },

传递给过滤器构造函数的函数包括测试唯一性的逻辑,并为数组添加匹配等。

如果离开主题,请告诉我,我会删除答案。