Sapui5 向控件添加“All”值的最佳方法是什么?

Sapui5 向控件添加“All”值的最佳方法是什么?,sapui5,Sapui5,//更新:我在中使用此控件 在UI5的控制下,如果我选择了一个项目,我将无法返回到未选择的状态,因此我希望在项目中添加“所有”值: 这项工作: <Select> <core:Item key="" text="All" /> <core:Item key="another value" text="another value"/> </Select> 但在本例中,所有这些都是错误的: <Select items="{

//更新:我在中使用此控件

在UI5的控制下,如果我选择了一个项目,我将无法返回到未选择的状态,因此我希望在项目中添加“所有”值:

这项工作:

<Select>
    <core:Item key="" text="All" />
    <core:Item key="another value" text="another value"/>
</Select>
但在本例中,所有这些都是错误的:

<Select
    items="{
        path: '/PRODUCTS'
    }">
    <core:Item key="" text="All" />
    <core:Item key="{ID}" text="{Route_Name}" />
</Select>

我该怎么办

必须向text=All的项添加一些键值。请在jsbin中查看工作


在下面设置模型的位置添加

var oView = this.getView();
    fnSuccess(oData,oResponse){
        var value = {
                      ID          : "All",
                      Route_Name  : "All",
            };

        oData.results.splice(0,0,value);              // oData your array of data
        var oSelectData = {
                            PRODUCTS : oData
            };

        var oSelectJSON = new sap.ui.model.json.JSONModel();
        oSelectJSON.setData(oSelectData);
        oView.byId("id_select").setModel(oSelectJSON);
    }

如果您想让用户再次选择无项,我建议在基本选择控件上使用sap.m.ActionSelect或sap.m.ComboBox


对于ActionSelect:使用forceSelection:false关闭强制选择,并添加一个操作按钮,该按钮带有执行myActionSelect.close.setSelectedKey;的press事件处理程序;。下面是一个示例:

FacetFilter控件将适合您的要求。它有一个“全部”选项来选择列表中的所有值

<Select
    items="{
        path: '/PRODUCTS'
    }">
    <core:Item key="" text="All" />
    <core:Item key="{ID}" text="{Route_Name}" />
</Select>
<FacetFilter
            id="idFacetFilter"
            type="Simple"
            confirm="handleConfirm">
            <lists>
                <FacetFilterList
                    title="Route"
                    key="route"
                    mode="MultiSelect"
                    items="{
                        path: '/PRODUCTS'
                    }" >
                    <items>
                        <FacetFilterItem
                            text="{Route_Name}"
                            key="{ID}" />
                    </items>
                </FacetFilterList>
            </lists>
        </FacetFilter>

为此,我创建了两个数组,一个包含“All”键/值对,另一个包含我的项列表,然后将它们合并在一起。在JSON视图模型中,声明数组:

选择[]

在onBeforeRendering生命周期方法中,检查数组是否填充为<0,如果填充为<0,请读取包含列表的实体集:

    onBeforeRendering: function() {
        // Build the provinces list
        if (this.getModel("view").getProperty("/selections").length === 0) {
            this.getModel().read("/SelectionList", {
                success: this._setSelections.bind(this)
            });
        }
成功后,构建阵列并设置属性:

    _setSelections: function(oResponse) {
        var aSelections = [{
            key: "",
            text: "(All)"
        }];
        if (typeof oResponse.results !== "undefined") {
            aSelections = aSelections.concat(oResponse.results);
        }
        this.getModel("view").setProperty("/selections", aSelections);
    },

与@vivek'答案类似,在加载数据时附加一个All:

    onHazardTabBarSelect : function(oEvent) {
        var oTabBar = oEvent.getSource(),
        sSelectedTabId = oTabBar.getSelectedKey(),
        oSelectedTab = sap.ui.getCore().byId(sSelectedTabId),
        sAssignmentPath = oSelectedTab.getBindingContext().getPath();

        this._oModel.read( sAssignmentPath + "/assignedControls", {
            urlParameters: {
                "$expand": "control"
            },
            success: this.addControlSelectData.bind(this), 
            error: this.errorCallback.bind(this)
        });
    },

    addControlSelectData : function(oEvent) {
        var oSelectControl = this.byId("controlSelect"),
        aControlResults = oEvent.results,
        aResult = [{
            "control" : {
                id: "All",
                name: "All"
            }
        }],
        aData = aResult.concat(aControlResults);
        oSelectControl.setModel(new sap.ui.model.json.JSONModel(aData));
    },

使用组合框并将selectAll添加到项目列表应该可以工作。然后,在selection change事件中,可以使用oEvent.getParameterchangedItem,然后仅使用oEvent.oSource.SetSelectedKeyRes检查selectAll选项是否已被选中,其中res是所有项,或者如果selectAll选项已被取消选中,则仅为null。

方面过滤器更适合您的要求,因为它以“全部”作为选择选项提供选择我不完全了解您真正想要实现的目标。如果你想让用户选择“无”,为什么要添加一个All项?@boghyon,这是Filter Bar@StephenS中的一个控件,似乎我需要在my data.json中添加过滤器来配置Facet Filter?我的问题可能与尝试过的ActionSelect重复,但action按钮在底部,如果有很多数据,很难找到它。我明白了。如果是关于过滤的,你可能想试试而不是FilterBar。用户可以清楚地看到他选择的过滤器,您也可以选择全部删除过滤器。否则,如果您想坚持使用FilterBar,那么ComboBox或FacetFilter也是不错的选择。对不起,我不太明白,FnSucture是setModel或其他的回调函数。如果您从后端获取数据,FnSucture是oData模型的success函数。否则oData提到的是fnsucture函数是您自己现有的数组。它可以工作,添加所有内容而不修改背景数据。与我在filter中的datapicker和timepicker设计有点不一致,但我可以使用它。谢谢。