javascript 无法示例化UI5类,原因是“TypeError:...不是构造函数”

wfauudbj  于 2023-06-04  发布在  Java
关注(0)|答案(1)|浏览(212)

我正在尝试重构遗留的UI5代码库,并希望使用可重用的对话框。
我的步骤:
1.我已经下载了Walkthrough Step 19: Reuse Dialogs示例
1.我已将HelloDialog.js添加到项目的./controller/文件夹中
1.我已将HelloDialog.fragment.xml添加到项目的./view/文件夹中
1.我将HelloDialog.jsHelloDialog.fragment.xml内部的名称空间从sap.ui.demo.walkthrough.controller.HelloDialog调整为webapp.controller.HelloDialog
1.我为HelloDialog添加了一个按钮:

<Button id = "helloDialogButton"
        icon = "sap-icon://world"
        text = "Show Popup"
        press = ".onOpenDialog" />

1.在App.controller.js中添加:

onOpenDialog() {
    this.getOwnerComponent().openHelloDialog();
},

1.我已经将"./controller/HelloDialog"添加到Component.js并初始化对象:

init(...args) {
    UIComponent.prototype.init.apply(this, args);
    this.getRouter().initialize();
    this._helloDialog = new HelloDialog(this.getRootControl());
}

1.我已经将exitopenHelloDialog事件的钩子添加到Component.js

exit() {
    this._helloDialog.destroy();
    delete this._helloDialog;
},

openHelloDialog() {
    this._helloDialog.open();
},

现在,我运行项目并获得空白页面,在DevTools控制台中,我看到以下错误:
无法加载容器rootComponentContainer的组件。原因:类型错误:HelloDialog不是构造函数

我能发现的唯一区别是我在代码中使用了箭头函数,但是箭头函数会破坏UI5吗?可能是对象上下文的一些问题。

xzv2uavs

xzv2uavs1#

UI 5类的构造函数应该避免使用箭头函数:

//  constructor: () => {/*...*/}
constructor: function() { // e.g. in HelloDialog.js
  // Avoid arrow functions in UI5 class constructors
},

这同样适用于VanillaJS中的构造函数。* * 不支持**在arrow函数上调用new
还要注意箭头函数也不创建自己的上下文(this)。它们的上下文基于箭头函数定义的 scope,通常是window对象。因此,如果函数体中的this应该引用其类示例,则不应使用箭头表达式定义方法。
有关更多限制,请参阅上面的链接文档。

相关问题