Javascript 在离开视图时,UI5中不会销毁/重置基于片段的对话框

Javascript 在离开视图时,UI5中不会销毁/重置基于片段的对话框,javascript,memory-leaks,sapui5,Javascript,Memory Leaks,Sapui5,官方UI5文件: […]我们希望确保在销毁组件时释放为此帮助对象分配的内存。否则,我们的应用程序可能会导致内存泄漏 为此,我们使用exithook。销毁组件时,OpenUI5框架调用分配给exit的函数。我们调用HelloDialog的destroy函数来清理helper类并结束其生命周期。尽管如此,实例本身仍将存在于浏览器内存中。因此,我们通过调用delete this来删除对HelloDialog实例的引用。\u HelloDialog浏览器的垃圾收集可以清理其内存 我在上设置了一个断点内部

官方UI5文件:

[…]我们希望确保在销毁组件时释放为此帮助对象分配的内存。否则,我们的应用程序可能会导致内存泄漏

为此,我们使用
exit
hook。销毁组件时,OpenUI5框架调用分配给
exit
的函数。我们调用HelloDialog的destroy函数来清理helper类并结束其生命周期。尽管如此,实例本身仍将存在于浏览器内存中。因此,我们通过调用
delete this来删除对
HelloDialog
实例的引用。\u HelloDialog
浏览器的垃圾收集可以清理其内存

我在
上设置了一个断点内部

exit(){
这个._helloDialog.destroy();
删除此项;
}
我希望在离开承载此对话框的视图时触发断点。事实上,当我切换视图时,什么都没有发生,看起来根本没有执行
exit()

除此之外,我注意到,在打开对话框、在那里键入文本、关闭然后重新打开对话框之后,先前键入的文本保持不变

这种行为迫使我假设对话框对象从未被释放,它可能是内存泄漏的潜在场所

问题:

  • 为什么当我离开定义了此对话框的视图时,
    退出
    钩子没有被触发
  • UI5中是否有“重置”对话框内容的最佳实践/通用模式
  • 为什么当我离开定义了此对话框的视图时,
    退出
    钩子没有被触发

    销毁对话框一直是一种有点可疑的做法:例如,当用户决定再次打开对话框时;对话框及其整个子节点树需要在DOM上重新创建和重新引用,每个控件需要在Core上重新注册,以及它们在UIArea上的事件,模型需要传播,同时触发各种事件,内存需要重新分配,等等。。总而言之,相当昂贵。

    但是,当应用程序调用ManagedObject上的
    destroy()
    时,会自动触发
    退出挂钩。例如,当用户导航到主页时,Fiori启动板会自动调用
    currentUIComponent.destroy()
    ,触发包括对话框在内的每个子元素上的
    exit
    -hook

    UI5中是否有“重置”对话框内容的最佳实践/通用模式

    是的,请看我的答案