调用后再次尝试打开对话框片段时出现以下错误this._oDialog.destroy()
:
未捕获的类型错误:无法读取 null 的属性“setInitialFocusId”
我的问题就像这里所说的问题:关闭后如何清除dialog/xmlfragment内容?然而,解决方案显然似乎只是“不要使用属性 setInitialFocus”,我在代码中的任何地方都没有使用它。
控制器
openDialog: function() {
if (!this._oDialog) {
this._oDialog = sap.ui.xmlfragment("myFragmentPath", this);
this.getView().addDependent(this._oDialog);
}
this._oDialog.open();
},
onExit: function () {
if (this._oDialog) {
this._oDialog.destroy();
}
},
afterClose: function () {
if (this._oDialog) {
this._oDialog.destroy();
}
},
handleClose: function (oEvent) {
this._oDialog.close();
}
对话片段
<Dialog xmlns="sap.m" afterClose=".afterClose">
<!-- ... -->
</Dialog>
主要 XML 视图
<Button press=".openDialog" />
附加信息:
- 当以下情况时,控制器行中会出现错误消息:
this._oDialog.open();
叫做。
- 我使用的是 sap 库版本 1.60.1。
if (this._oDialog) {
this._oDialog.destroy();
this._oDialog = null; // make it falsy so that it can be created next time
}
关闭后,对话框将在您的代码中被销毁。However, the this._oDialog
仍然在那里。
Since this._oDialog
不是一个假值,而只是一个被摧毁对话框实例,没有创建新的对话框openDialog()
第二次。因此您正在尝试打开一个已损坏的对话框。
当对话框被销毁时,其内部oPopup
is 设置为空,它解释了错误消息。
⚠️ Note
-
通常有无需销毁对话框关闭后。当视图被销毁时,对话框将自动销毁,因为片段依赖于视图。如果目的是重置数据值,请尝试解除绑定属性而不是每次都销毁并重新创建整个片段,这是相当昂贵的。
-
从UI5 1.56开始,工厂功能sap.ui.xmlfragment
已弃用因为它通过同步 XHR 获取片段(阻塞主线程)。使用其中之一新的异步 API.
-
一个更简单的选择是以声明方式添加片段在你的视图定义中<core:Fragment fragmentName="..." type="XML" />
to the <dependents>
聚集一定的控制。就像在这个示例中一样.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)