Sapui5 为什么byId找不到控件?
我正试图通过Sapui5 为什么byId找不到控件?,sapui5,Sapui5,我正试图通过byId调用获取sap.m.Input控件,如下所示: 正如你在上面看到的,我打电话: this.byId("CharInput-001-ZPM_TEST_01-ZPM_TEST_5") 使用右id并获取未定义的。我做错了什么 提示:运行时,id自动生成,这意味着,我单击一个按钮,sap.m.Input字段将自动生成,并放置在SimpleForm控件中 使用byid调用SimpleForm,可以找到该控件: 片段: sap.ui.define([ "sap/m/Dia
byId
调用获取sap.m.Input
控件,如下所示:
正如你在上面看到的,我打电话:
this.byId("CharInput-001-ZPM_TEST_01-ZPM_TEST_5")
使用右id
并获取未定义的。我做错了什么
提示:运行时,id
自动生成,这意味着,我单击一个按钮,sap.m.Input
字段将自动生成,并放置在SimpleForm控件中
使用byid调用SimpleForm
,可以找到该控件:
片段:
sap.ui.define([
"sap/m/Dialog",
"sap/m/Text",
"sap/m/Button"
], function (Dialog, Text, Button) {
"use strict";
const fnNumList = () => {
return new sap.m.ObjectListItem({
number: "{ValueHelp>NumValueFrom}",
numberUnit: "{ValueHelp>UnitOfMeasurement}"
});
};
const fnCharList = () => {
return new sap.m.StandardListItem({
description: "{ValueHelp>CharValue}"
});
};
const fnCurrList = () => {
return new sap.m.ObjectListItem({
number: "{ValueHelp>CurrValueFrom}",
numberUnit: "{ValueHelp>CurrCurrencyFrom}"
});
};
const fnDateList = () => {
const oDatePicker = new sap.m.DatePicker({
dateValue: "{ValueHelp>DateValueFrom}",
valueFormat: "dd-MM-yyyy",
displayFormat: "dd-MM-yyyy",
editable: false
});
return new sap.m.CustomListItem({
content: oDatePicker
});
};
const fnTimeList = () => {
const oTimePicker = new sap.m.TimePicker({
valueFormat: "HH:mm:ss",
displayFormat: "HH:mm:ss",
support2400: true,
dateValue: "{ValueHelp>TimeValueFrom}",
editable: false
});
return new sap.m.CustomListItem({
content: oTimePicker
});
};
const fnDetermineListType = (oValueHelp) => {
switch (oValueHelp.DataType) {
case "NUM":
return fnNumList();
case "DATE":
return fnDateList();
case "TIME":
return fnTimeList;
case "CURR":
return fnCurrList();
default:
return fnCharList();
}
};
const fnCreateList = (oValueHelp) => {
const oNewList = new sap.m.List({
includeItemInSelection: true,
mode: sap.m.ListMode.SingleSelect
});
oNewList.bindItems({
path: "ValueHelp>/",
template: fnDetermineListType(oValueHelp)
});
return oNewList;
};
const fnDestroyDialog = (oDialog) => {
oDialog.close();
oDialog.destroy();
};
return {
showSingle: function (aCharsHelpValues, fnGetSelectedObject, sValueHelpField) {
const oList = fnCreateList(aCharsHelpValues[0]);
const oDialog = new Dialog({
title: aCharsHelpValues[0].CharValue,
content: oList,
beginButton: new sap.m.Button({
text: "OK",
press: function () {
fnGetSelectedObject(oList.getSelectedItem().getBindingContext("ValueHelp").getObject(), sValueHelpField);
fnDestroyDialog(oDialog);
}
}),
endButton: new sap.m.Button({
text: "Close",
press: function () {
fnDestroyDialog(oDialog);
}
})
});
return oDialog;
}
};
});
更新
输入由以下内容生成:
_buildCharacInputId: function (oData) {
return "CharInput:" + oData.Classtype + ":" + oData.Classnum + ":" + oData.NameChar;
},
_determineCtrlForChars: function (oData) {
const sId = this._buildCharacInputId(oData);
const self = this;
switch (oData.DataType) {
case "CHAR":
return new sap.m.Input(sId, {
maxLength: oData.NumberDigits,
type: sap.m.InputType.Text,
showValueHelp: oData.WithValues,
valueHelpRequest: self._onCharValueHelp.bind(self)
});
case "CURR":
return new sap.m.MaskInput(sId, {
mask: oData.Template.replace(/_/g, "9") + (oData.Currency ? " ".concat(oData.Currency) : "")
});
case "DATE":
return new sap.m.DatePicker(sId, {
valueFormat: "dd-MM-yyyy",
displayFormat: "dd-MM-yyyy"
});
case "NUM":
return new sap.m.MaskInput(sId, {
mask: oData.Template.replace(/_/g, "9") + (oData.UnitTExt ? " ".concat(oData.UnitTExt) : "")
});
case "TIME":
return new sap.m.TimePicker(sId, {
valueFormat: "HH:mm:ss",
displayFormat: "HH:mm:ss",
support2400: true
});
default:
throw "Not supported type. Please contact app developer.";
}
},
该id不是在
视图
范围中生成的,因此它没有正确的DOM id
控制器中的以下代码创建了一个id,如CharInput-001-ZPM_TEST_01-ZPM_TEST_5
:
_buildCharacInputId: function (oData) {
return "CharInput:" + oData.Classtype + ":" + oData.Classnum + ":" + oData.NameChar;
},
//...
const sId = this._buildCharacInputId(oData);
//...
const sId = this.createId(this._buildCharacInputId(oData));
使用将作为视图的前缀,以便id为\uxmlview1--CharInput-001-ZPM\u TEST\u01-ZPM\u TEST\u5
:
_buildCharacInputId: function (oData) {
return "CharInput:" + oData.Classtype + ":" + oData.Classnum + ":" + oData.NameChar;
},
//...
const sId = this._buildCharacInputId(oData);
//...
const sId = this.createId(this._buildCharacInputId(oData));