我正在尝试重构遗留的UI5代码库,并希望使用可重用的对话框。
我的步骤:
1.我已经下载了Walkthrough Step 19: Reuse Dialogs示例
1.我已将HelloDialog.js
添加到项目的./controller/
文件夹中
1.我已将HelloDialog.fragment.xml
添加到项目的./view/
文件夹中
1.我将HelloDialog.js
和HelloDialog.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.我已经将exit
和openHelloDialog
事件的钩子添加到Component.js
:
exit() {
this._helloDialog.destroy();
delete this._helloDialog;
},
openHelloDialog() {
this._helloDialog.open();
},
现在,我运行项目并获得空白页面,在DevTools控制台中,我看到以下错误:
无法加载容器rootComponentContainer
的组件。原因:类型错误:HelloDialog
不是构造函数
我能发现的唯一区别是我在代码中使用了箭头函数,但是箭头函数会破坏UI5吗?可能是对象上下文的一些问题。
1条答案
按热度按时间xzv2uavs1#
UI 5类的构造函数应该避免使用箭头函数:
这同样适用于VanillaJS中的构造函数。* * 不支持**在arrow函数上调用
new
!还要注意箭头函数也不创建自己的上下文(
this
)。它们的上下文基于箭头函数定义的 scope,通常是window
对象。因此,如果函数体中的this
应该引用其类示例,则不应使用箭头表达式定义方法。有关更多限制,请参阅上面的链接文档。