sap.m表输入中的值状态更改后,建议项未出现

问题描述 投票:0回答:2

我在sap.m表输入上有一个RecommendationionItems,在值状态更改后没有出现。

请注意,使用的SAPUI5版本为1.38.37

我有一个sap.m表,其中包含启用了建议列表的列。用户必须从可用的建议列表中选择客户编号。他也可以手动输入。

现在有根据用户输入的验证列表。

XML.view

<items>
    <ColumnListItem>
            <cells>
                <Input id="idCustNumber" type="Text" value="{path:'createJSON>CUSTNO'}" change="onCustValChange" liveChange="onLiveChangeCustNo"
                    startSuggestion="3" maxSuggestionWidth="400px" showSuggestion="true" suggestionItemSelected="OnSuggestionSelectedCustNumber"
                    suggest="handleSuggestCustNo" suggestionItems="{path:'ITEMVALJSON>/items', templateShareable:false}">
                           <suggestionItems>
                                        <core:Item key="{ITEMVALJSON>CustNoAndName}" text="{ITEMVALJSON>CustNoAndName}"/>
                           </suggestionItems>
                </Input>

Controller.js

        handleSuggestCustNo: function (oEvent) {
                var sTerm = oEvent.getParameter("suggestValue");
                oEvent.getSource().setFilterFunction(function (sTerm, oItem) {
                    // A case-insensitive 'string contains' style filter
                    return oItem.getText().match(new RegExp(sTerm, "i"));

                });
            },

            onCustValChange: function (oEvent) {
                var oInput = oEvent.getSource();
                this._validateCustValInput(oInput);
            },

            _validateCustValInput: function (oInput) {
                var oBinding = oInput.getBinding("suggestionItems");
                var value = oInput.getValue();

                if (value !== "") {
                    var filters = [new Filter("CustNo", sap.ui.model.FilterOperator.EQ, value)];
                    var found = oBinding.filter(filters).getLength();

                    if (found === 0) {
                        oInput.setValueState(sap.ui.core.ValueState.Error);
                        this.sSelectedTableRow.ERRORFLAG = "X";
                        oInput.setValueStateText("Customer " + "'" + value + "' is invalid for GCC: " + "'" + this.Header.Cntry + "'");
                    } else {
                        oInput.setValueState(sap.ui.core.ValueState.None);
                        this.sSelectedTableRow.ERRORFLAG = "";
                    }
                } else {
                    oInput.setValueState(sap.ui.core.ValueState.None);
                    this.sSelectedTableRow.ERRORFLAG = "";
                }
            },

现在的问题是,如果验证失败,则将值状态设置为error。然后值更改后,建议列表不出现。

sapui5
2个回答
0
投票

问题不是验证本身(或SAPUI5版本),而是在以下代码行中:

var found = oBinding.filter(filters).getLength();

[这里您正在过滤suggestionItems聚合...。这就是为什么它们停止工作的原因:ITEMVALJSON模型仅填充有选定并经过验证的值。尝试取消输入中的绑定值字母,您将明白我的意思。

通过这种方式,我注意到了另外两件事:您正在过滤错误的属性(但可能只是剪切和粘贴的问题),并且handleSuggestCustNo函数可能是不必要的。您只能在初始化阶段为输入设置一次过滤功能(setFilterFunction)。

希望这会有所帮助。


0
投票

根据建议,我已经清除了_validateCustValInput末尾的过滤器。因此,现在我可以在更正任何无效客户条目的同时获得建议。

oBinding.filter([]);

但是出现了一个新问题。现在,当我从建议列表中进行选择并更正无效条目时,onCustValChange没有得到调用。所以我的ValueState更改逻辑没有被调用。请参考下面的屏幕截图。Customer Validation

© www.soinside.com 2019 - 2024. All rights reserved.