我有输入字段,我需要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 例如,当您输入时,它的行为是相同的。它在搜索中显示了一些项目,用)会显示更多的项目。
答案 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
过滤的那些值。