簡體   English   中英

SAPUI5使用格式化程序基於字段過濾OData模型

[英]SAPUI5 Filter OData model based on fields using formatter

我有一個包含ObjectListItems的列表,其內容由OData服務提供。 標題之一是該內容,該屬性的值如下:

title="{ path: 'title', formatter: 'app.schedule.util.Formatter.titleText'}"

如您所見,此標題中有一個格式化程序。 OData將帶來一個諸如“ available”或“ disabled”的值,並且格式化程序會將其轉換為針對用戶特定語言的文本。

我正在此列表上實現搜索功能,並且工作正常,問題是它僅在“可用”和“禁用”值上搜索,而不是在格式化文本中搜索,因為這不是值被用戶認可。

過濾器代碼為:

handleSearch : function (evt) {
    // create model filter
    var filters = [];
    var query = evt.getParameter("query");
    if (query && query.length > 0) {
        filters.push(new sap.ui.model.Filter("booked", sap.ui.model.FilterOperator.Contains, query));
        filters.push(new sap.ui.model.Filter("weekday", sap.ui.model.FilterOperator.Contains, query));
        filters.push(new sap.ui.model.Filter("title", sap.ui.model.FilterOperator.Contains, query));
        filters = new sap.ui.model.Filter(filters, false);
    }

    // update list binding
    var list = this.getView().byId("list");
    var binding = list.getBinding("items");
    binding.filter(filters);
},

關於如何考慮過濾器上的格式化程序而不是原始數據的任何想法?

解決方案考慮到您僅在進行客戶端搜索:假設:如果列表中有分組。

handleSearch : function (evt) {
    sFilterPattern = evt.getParameter("query");
    sFilterPattern = sFilterPattern.toLowerCase();
        var aListItems = this.getView().byId("list").getItems();
        var bVisibility;
        var oGroupItem = null;
        var iCountInGroup = 0;
        for (var i = 0; i < aListItems.length; i++) {
            if (aListItems[i] instanceof sap.m.GroupHeaderListItem) {
                if (oGroupItem) {
                    if (iCountInGroup == 0) {
                        oGroupItem.setVisible(false);
                    } else {
                        oGroupItem.setVisible(true);
                        oGroupItem.setCount(iCountInGroup);
                    }
                }
                oGroupItem = aListItems[i];
                iCountInGroup = 0;
            } else {
                bVisibility = this.applySearchPatternToListItem(aListItems[i], sFilterPattern);
                aListItems[i].setVisible(bVisibility);
                if (bVisibility) {
                    iCountInGroup++;
                }
            }
        }
        if (oGroupItem) {
            if (iCountInGroup == 0) {
                oGroupItem.setVisible(false);
            } else {
                oGroupItem.setVisible(true);
                oGroupItem.setCount(iCountInGroup);
            }
        }
}

applySearchPatternToListItem:function(oItem, sFilterPattern) {
    if (sFilterPattern == "") {
        return true;
    }
    //uncomment to search in oModel data 
    /*var oIteshellata = oItem.getBindingContext(this.sModelName).getProperty();
    for (var sKey in oIteshellata) {
        var sValue = oIteshellata[sKey];
        // if (sValue instanceof Date) {
        // //just for the filter take each number as string
        // sValue = sValue.getDate() + "." +
        // sValue.getMonth() + "." + sValue.getFullYear();
        // }
        if (typeof sValue == "string") {
            if (sValue.toLowerCase().indexOf(sFilterPattern) != -1) {
                return true;
            }
        }
    }*/
    // if nothing found in unformatted data, check UI elements
    if ((oItem.getIntro() && oItem.getIntro().toLowerCase().indexOf(sFilterPattern) != -1) 
    || (oItem.getTitle() && oItem.getTitle().toLowerCase().indexOf(sFilterPattern) != -1) 
    || (oItem.getNumber() && oItem.getNumber().toLowerCase().indexOf(sFilterPattern) != -1) 
    || (oItem.getNumberUnit() && oItem.getNumberUnit().toLowerCase().indexOf(sFilterPattern) != -1) 
    || (oItem.getFirstStatus() && oItem.getFirstStatus().getText().toLowerCase().indexOf(sFilterPattern) != -1) 
    || (oItem.getSecondStatus() && oItem.getSecondStatus().getText().toLowerCase().indexOf(sFilterPattern) != -1)) {
        return true;
    }
    // last source is attribute array
    var aAttributes = oItem.getAttributes();
    for (var j = 0; j < aAttributes.length; j++) {
        if (aAttributes[j].getText().toLowerCase().indexOf(sFilterPattern) != -1) {
            return true;
        }
    }
    return false;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM