添加添加&#39; All&#39;的最佳方式是什么?值为<select>控制?

时间:2017-02-07 09:21:17

标签: sapui5

//更新:我用这个&lt; select&gt;过滤栏中的控件 在UI5的控制下,如果我选择一个项目,我将无法返回到未选择的状态,因此我想添加“全部”#39;物品价值: 这有效: &LT;选择&GT;     &lt; core:Item key =&#34;&#34;文本=&#34;所有&#34; /&GT;     &lt; core:Item key =&#34;另一个值&#34; text =&#34;另一个值&#34; /&gt; &LT; /选择和GT; 但是&#34;所有&#34;在这个例子中消失: &LT;选择     项=&#34; {         路径:&#39; / PRODUCTS&#39;     }&#34;&GT;     &lt; core:Item key =&#34;&#34;文本=&#34;所有&#34; /&GT;     &lt; core:Item key =&#34; {ID}&#34;文本=&#34; {ROUTE_NAME}&#34; /&GT; &LT; /选择和GT; 我该怎么办?

7 个答案:

答案 0 :(得分:1)

如果您想让用户再次选择任何项目,我建议您使用sap.m. ActionSelect 或sap.m。 ComboBox 。基本选择控制。

如果是ActionSelect:使用forceSelection:false关闭强制选择,并添加一个操作按钮,其中按下事件处理程序执行myActionSelect.close().setSelectedKey("");。以下是一个示例:https://embed.plnkr.co/tk9ulw/

答案 1 :(得分:0)

您必须使用text =&#34; All&#34;为项添加一些键值。请查看jsbin work example

var oModel = new sap.ui.model.json.JSONModel(
  {
    items:
    [
      { KEY: null, LABEL: "-ALL-"},
      { KEY: "A", LABEL: "A"},
      { KEY: "B", LABEL: "B"},
      { KEY: "C", LABEL: "C"},
      { KEY: "D", LABEL: "D"}
    ]
});

var oSelect = new sap.m.Select({
    items: {
      path: "/items",
      template: new sap.ui.core.Item({ key: "{KEY}", text:"{LABEL}" })
    }
})

oSelect.setModel(oModel);

答案 2 :(得分:0)

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

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);
    }

答案 3 :(得分:0)

FacetFilter控件适合您的要求。它具有选择列表中所有值的全部选择。

<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>

答案 4 :(得分:0)

我是通过创建两个数组来实现的,一个是“All”键/值对,另一个是我的项目列表,然后将它们连接在一起。在JSON视图模型中,声明数组:

selections[];

在onBeforeRendering()生命周期方法中,检查是否填充了数组(&lt; 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);
    },

答案 5 :(得分:0)

与@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));
    },

答案 6 :(得分:0)

使用组合框并将selectAll添加到项目列表应该可以工作。然后,在选择更改事件上,可以检查是否已选择selectAll选项(通过使用oEvent.getParameter(“ changedItem”)),然后仅检查oEvent.oSource.setSelectedKeys(res),其中res是所有项目或仅如果取消选择selectAll选项,则为null。