辅助输入未显示所有建议

时间:2018-11-27 09:36:37

标签: sapui5

我有输入字段,我需要odata模型中的建议项。

           <Input
            id="productInput"
            type="Text"
            placeholder="Enter Product ..."
            showSuggestion="true"
            showValueHelp="true"
            valueHelpRequest="handleValueHelp"
            suggestionItems="{/ProductCollection}" >
            <suggestionItems>
                <core:Item text="{Name}" />
            </suggestionItems>
         </Input>

问题是缺少项目:并非所有项目都显示(您可以检查此链接 https://sapui5.hana.ondemand.com/#/sample/sap.m.sample.InputAssisted/preview 例如,当您输入时,它的行为是相同的。它在搜索中显示了一些项目,用)会显示更多的项目。

1 个答案:

答案 0 :(得分:0)

您想要做的基本上是显示所有包含输入中值的项目。 SAPUI5为此有一个方便的过滤器,称为sap.ui.model.FilterOperator.Contains

sap.m.Input的问题在于,它只能以一种方式工作,即使您在Suggest事件中手动设置了包含过滤器,它也会显示以提供的字母开头的建议,就像sap.ui.model.FilterOperator.StartsWith过滤运算符一样。这就是为什么它向您显示较少建议的原因。

在您的问题中使用相同的products.json模型,我们可以执行以下操作:

XML输入:

<Label text="Product" labelFor="productInput"/>
<Input
    id="productInput"
    type="Text"
    placeholder="Enter Product ..."
    showSuggestion="true"
    showValueHelp="false"
    suggest="handleSuggest"
    suggestionItems="{productsModel>/ProductCollection}" >
    <suggestionItems>
        <core:Item text="{productsModel>Name}" />
    </suggestionItems>
</Input>

控制器:

handleSuggest: function (oEvent) {
    var aFilters = [];
    var sTerm = oEvent.getParameter("suggestValue");
    if (sTerm) {
        aFilters.push(new sap.ui.model.Filter("Name", sap.ui.model.FilterOperator.Contains, sTerm));
    }
    oEvent.getSource().getBinding("suggestionItems").filter(aFilters);
    //do not filter the provided suggestions before showing them to the user - important
    oEvent.getSource().setFilterSuggests(false);
}

setFilterSuggests()方法设置为 false 非常重要,以便在向用户显示所提供的建议之前不对其进行过滤,这与我们之前所做的相反。

使用这种方法,建议的项目将仅显示通过指定的过滤条件sap.ui.model.FilterOperator.Contains过滤的那些值。

Other SAPUI5 Filter Operators