sap.m.input显示所有建议并强制选择建议

时间:2016-10-13 17:23:43

标签: javascript sapui5

预期行为:

1)用户点击输入字段,显示所有值的列表

2)当用户输入至少3个字符时开始过滤

3)用户如果被迫选择建议(他不能提供不在建议清单中的价值)。

到目前为止,我有以下控制权:

this.transmitter = new sap.m.Input({
        id : this.createId("transmitterControl"),
        // placeholder : "Enter emiter ...",
        showSuggestion : true,
        suggest : oCon.handleSuggestTransmitter,
        suggestionItems:{
            path:"/services",
            template: new sap.ui.core.Item({text:"{serviceName}", key:"{serviceId}"})
        },
        startSuggestion : 3,
        suggestionItemSelected : function(evt) {
            oCon.onSuggestionTransmitterSelected(evt);
        },
    }).addStyleClass("font_bold")

对于控制器:

onSuggestionTransmitterSelected : function (e) {
        var selectedTransmitter = e.getParameter("selectedItem").getBindingContext().getObject();
        this.serviceData.transmitter = selectedTransmitter;
    },

    showAllSuggestion : function (transmiterAutoComplete) {
        console_log("showAllSuggestion");
        transmiterAutoComplete.getBinding("suggestionItems");
    },

    handleSuggestTransmitter: function(e) {
        var sTerm = e.getParameter("suggestValue");
        var aFilters = [];
        if (sTerm) {
            aFilters.push(new sap.ui.model.Filter("serviceName", sap.ui.model.FilterOperator.StartsWith, sTerm));
        }
        e.getSource().getBinding("suggestionItems").filter(aFilters);
    },

支付建议有效,当我输入3个字符时会显示一个弹出窗口,并且可以进行过滤。

我缺少的是什么: a)单击输入字段显示整个列表。 b)强制选择(不知道)

我尝试过设置startSuggestion:0,但它没有用。根据文档,它应该显示弹出窗口,并提示onClick:

  

https://sapui5.hana.ondemand.com/docs/api/symbols/sap.m.Input.html#getStartSuggestion

     

getStartSuggestion():int获取property的当前值   startSuggestion。输入之前输入文本的最小长度   建议事件被解雇。默认值为1表示建议   用户输入后输入事件。当它设置为0时,建议   当没有文本的输入获得焦点时触发事件。

     

默认值为1。

我也试过附上onfocusin事件。它工作,处理程序被调用,但我不知道我应该调用什么方法来显示建议弹出列表。

   transmiterAutoComplete.addEventDelegate({
            onfocusin : function(){
                console_log("testTransmiterComplete");
                app.getCurrentController().showAllSuggestion(transmiterAutoComplete);
            }
        });

1 个答案:

答案 0 :(得分:0)

根据您的描述,this example将涵盖您的大部分需求。它的工作原理就像一个弹出窗口。 如果这不是你想要的,你应该继续。在事件授权中,您必须调用" handleSuggestTransmitter"。我会稍微改变它,所以你可以在不需要输入的情况下调用它,然后它会全部返回。 接下来,您需要对输入进行验证,以验证输入是否存在于列表中。 Here是如何在字段上设置状态的示例。

顺便问一下,为什么要使用JavaScript视图?