谁能向我解释一下,分离列表是什么,可以在网络上如此频繁地找到“具有现有父小部件的小部件可能不会添加到分离列表中”。我找不到解释或任何背景信息,只有错误消息。谢谢!
2 回答
作为内存泄漏缓解的一部分(IE 中大多数情况下,如果不是唯一需要的话),GWT 具有附加和分离小部件的概念。每当您将一个小部件作为子小部件添加到另一个附加小部件时,该子小部件及其所有子小部件也会被附加,并且相反,当您从其附加的父小部件中删除一个小部件时,它会与其所有子部件一起分离。当一个小部件被分离时,它应该释放所有可能导致内存泄漏的资源。
上面构建了附加小部件的树,但是树需要一个根。有两种这样的根附加小部件::RootPanel
总是附加的,通过wrap()
ping 现有 DOM 元素创建的小部件也会自动附加。
当页面卸载时,GWT 确保分离所有小部件以避免内存泄漏。为此,它在所谓的分离列表中跟踪根附加的小部件,并确保应该是根小部件的小部件实际上是根(即它们的元素不包含在另一个小部件的 DOM 子树中)。此规则的唯一例外是因为它代表所有其他小部件所在的文档。RootPanel.get()
<body>
分离列表是页面卸载时要分离的小部件列表(来源,只猜测其中一个来源)。
基本上(以下不是完整的解释,如果您愿意阅读官方 google 文档,GWT 有很好的文档说明),在 GWT 中,当您创建一个小部件时,该小部件在添加到 RootPanel 之前不会显示,或者附加到 RootPanel 的任何小部件(成为其父级)。有一些操作(例如我之前指出的链接)会导致小部件与 RootPanel 分离;但是,您不能调用RootPanel.detachNow(widget)
嵌入在父级中的小部件。这样的调用将导致您要求的异常。