Sapui5 sap.m表输入中值状态更改后未出现建议项
我在sap.m表输入上有一个SuggestionItems,它在值状态更改后不会出现 请注意,使用的SAPUI5版本是1.38.37 我有一个sap.m表,其中的列启用了建议列表。用户必须从可用建议列表中选择客户编号。他也可以手动输入 现在有一个验证列表,它取决于用户输入 XML.viewSapui5 sap.m表输入中值状态更改后未出现建议项,sapui5,Sapui5,我在sap.m表输入上有一个SuggestionItems,它在值状态更改后不会出现 请注意,使用的SAPUI5版本是1.38.37 我有一个sap.m表,其中的列启用了建议列表。用户必须从可用建议列表中选择客户编号。他也可以手动输入 现在有一个验证列表,它取决于用户输入 XML.view <items> <ColumnListItem> <cells> <Input id="idCustN
<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版本,我无法通过添加文本来实现这一点。因此,我在modelITEMVALJSON>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([]);
}