输入显示所有建议和强制选择建议

sap.m.input show all suggestion and forced choose suggestion

本文关键字:选择 显示 输入      更新时间:2023-09-26

预期行为:

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

dis付费建议工作,当我输入3个字符,弹出显示和过滤可以完成。

我错过了什么:A)在输入字段上单击显示整个列表。B)强制选择(不知道)

我试过设置startSuggestion: 0,但是它不起作用。根据文档,它应该显示带有建议的弹出框onClick:

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

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

默认值为1。

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

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

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

顺便说一下,你为什么使用JavaScript视图?