首页 > 解决方案 > 过滤 ListItem 和 sap.m.List 中的格式化元素

问题描述

我一直在为列表开发过滤器。我的列表根据实际数据记录中的两个条目在项目中显示一个图标。

new sap.ui.core.Icon({
    src : {
        parts : [
            { path : "Model>date" },
            { path : "Model>inventory" }                                        
        ],
        formatter : function(date, inventory) {
                if (!inventory) {
                    return "sap-icon://decline";
                }
                if (date != "31.12.9999") {
                    return "sap-icon://decline";
                }
                return "sap-icon://accept";
        }
    }
})

现在我将为这些信息实现一个过滤器:

我的问题是过滤器只接受一个路径元素。

var dateFilter =new sap.ui.model.Filter({
    path : "date",
    test : function(date) {
        //pseudo code
        if(#filter-true)
            show entries with accept;
        else
            show entries with decline;
    }
});
aFilters.push(dateFilter)

但实际上我不知道实现这个过滤器。有人能帮助我吗?

PS:我知道我的语法不是最好的;)

标签: javascriptsapui5

解决方案


您可以组合依赖于不同路径的多个过滤器。

var oDateFilter = new sap.ui.model.Filter({
    path : "date",
    test : function(sDate) {
        if(sDate === "31.12.9999"){
            return true;
        }
        return false;
    }
});

上面的代码创建了一个过滤器,该过滤器使用模型的“日期”属性进行操作。

var oInventoryFilter = new sap.ui.model.Filter({
    path : "inventory",
    test : function(bInventory) {
        if(bInventory !== true){
            return false;
        }
        return true;
    }
});

上面的代码使用“inventory”属性创建了一个过滤器。现在,我们通过以下代码组合它:

var oCombinedFilter = new sap.ui.model.Filter({
    filters: [oDateFilter, oInventoryFilter],
    and: true
});

对于将inventory 属性设置为true(确保参数是布尔值!)并且日期设置为“31.12.9999”的所有元素,此过滤器返回true。

有关更多信息,请参阅sap.ui.model.Filter


推荐阅读