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

Sapui5 sap.m表输入中值状态更改后未出现建议项,sapui5,Sapui5,我在sap.m表输入上有一个SuggestionItems,它在值状态更改后不会出现 请注意,使用的SAPUI5版本是1.38.37 我有一个sap.m表,其中的列启用了建议列表。用户必须从可用建议列表中选择客户编号。他也可以手动输入 现在有一个验证列表,它取决于用户输入 XML.view <items> <ColumnListItem> <cells> <Input id="idCustN

我在sap.m表输入上有一个SuggestionItems,它在值状态更改后不会出现

请注意,使用的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>
现在的问题是,如果验证失败,我将值状态设置为error。然后在值更改后,建议列表不会出现


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

var found = oBinding.filter(filters).getLength();
在这里,您将筛选出您的
suggestionItems
aggregation。。。。这就是它们停止工作的原因:ITEMVALJSON模型只填充了所选择和验证的值。尝试取消输入中绑定值的一个字母,您就会明白我的意思

顺便说一句,我注意到还有两件事:你过滤了错误的属性(但可能只是一个剪切粘贴的问题),你的
handleSuggestCustNo
函数可能是不必要的。在初始化阶段,您只能为输入设置一次筛选功能(
setFilterFunction

希望这有帮助。

我的(最小)工作代码,我用1.38.xx试用过

                            <Table id="table" items="{ path: '/items'}">
                                <columns>
                                    <Column>
                                        <Text text="ItemNo"/>
                                    </Column>
                                    <Column>
                                        <Text text="Name"/>
                                    </Column>
                                </columns>
                                <ColumnListItem>
                                    <cells>
                                        <Text text="{ItemNo}"/>
                                        <Input id="idCustNumber" placeholder="Suggestion test 2" type="Text" _value="{path:'localModel>CUSTNO'}" change="onCustValChange"
                                            maxSuggestionWidth="400px" showSuggestion="true" suggest="handleSuggestCustNo"
                                            suggestionItems="{path:'localModel>/items', templateShareable:true}">
                                            <suggestionItems>
                                                <core:Item text="{localModel>CustNoAndName}"/>
                                            </suggestionItems>
                                        </Input>
                                    </cells>
                                </ColumnListItem>
                            </Table>

注释每个输入的“value”属性。你能试试这个代码并告诉我它是否适合你吗?可能我出了什么问题,但我的
\u validateCustValInput
函数总是被触发

我发现对
suggestionItems
进行过滤会产生问题。但是我怎样才能进行验证呢。用户也可以手动输入,而不是从建议列表中选择。我必须在建议列表中显示客户编号和姓名,用户可以搜索任何人。然后在建议列表中选择,它应该只将客户编号带到输入字段。由于这个旧的UI版本,我无法通过添加文本来实现这一点。因此,我在model
ITEMVALJSON>CustNoAndNam
中添加了一个额外的列来实现这一点。但在我的需求中,我在
oLocalModel
中添加了一个新字段,该字段包含customer和Name的连接。我已经编辑了我的帖子来添加图片。我已经完成了这项工作,因为当前版本不支持搜索这两个值中任何一个的建议列表。但在select上,它会将customer和customer name带到各自的单元格中。这会在更正pic中显示的错误条目时引发问题。
                            <Table id="table" items="{ path: '/items'}">
                                <columns>
                                    <Column>
                                        <Text text="ItemNo"/>
                                    </Column>
                                    <Column>
                                        <Text text="Name"/>
                                    </Column>
                                </columns>
                                <ColumnListItem>
                                    <cells>
                                        <Text text="{ItemNo}"/>
                                        <Input id="idCustNumber" placeholder="Suggestion test 2" type="Text" _value="{path:'localModel>CUSTNO'}" change="onCustValChange"
                                            maxSuggestionWidth="400px" showSuggestion="true" suggest="handleSuggestCustNo"
                                            suggestionItems="{path:'localModel>/items', templateShareable:true}">
                                            <suggestionItems>
                                                <core:Item text="{localModel>CustNoAndName}"/>
                                            </suggestionItems>
                                        </Input>
                                    </cells>
                                </ColumnListItem>
                            </Table>
onInit: function () {
    var oLocalModel = new sap.ui.model.json.JSONModel({
        items: [{
            CustoNo: 1,
            CustNoAndName: "Mickey Mouse"
        }, {
            CustoNo: 2,
            CustNoAndName: "Donald Duck"
        }]
    });
    this.getView().setModel(oLocalModel, "localModel");

    var oData = {
        items: [{
            ItemNo: 1
        }, {
            ItemNo: 2
        }, {
            ItemNo: 3
        }]
    };

    var oModel = new sap.ui.model.json.JSONModel(oData);
    this.getView().setModel(oModel);

},
handleSuggestCustNo: function (oEvent) {
    console.log("handleSuggestCustNo");
    var sTerm = oEvent.getParameter("suggestValue");
    console.log({
        sTerm
    });
},

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

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

    if (value !== "") {
        var filters = [new sap.ui.model.Filter("CustNoAndName", 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");
        } else {
            oInput.setValueState(sap.ui.core.ValueState.None);
            //this.sSelectedTableRow.ERRORFLAG = "";
        }
    } else {
        oInput.setValueState(sap.ui.core.ValueState.None);
        //this.sSelectedTableRow.ERRORFLAG = "";
    }
    oBinding.filter([]);
}