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));