我有一个 GWT 2.4 应用程序,我通过将一个小部件切换到另一个Composite
小部件来“交换视图”,分别RootPanel
使用通常的RootPanel.get().clear()
和RootPanel.get().add(newWidget)
删除和添加。
第一个复合小部件包含一个PasswordTextBox
. 它侦听触发交换的 Enter 按键。没什么太花哨的:
getDisplay().getPasswordBoxForKeyPresses().addKeyPressHandler(new KeyPressHandler() {
public void onKeyPress(KeyPressEvent event) {
if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) {
swapWidgets(); // clear RootPanel and add new widget
}
}
});
问题是存在 DOM 内存泄漏:在RootPanel.get().clear()
调用之后,旧的复合小部件卡在分离的 DOM 树中,因为HTMLInputElement
forPasswordTextBox
对它有一些我无法识别的奇怪引用。
更新:
我采纳了以下有用的建议,在 style=detailed 编译并开始尝试沿着树向下查找对 JS 中元素的引用。我对 GWT 很陌生,所以对我来说仍然不清楚发生了什么。因此,从保留树的第二行开始,我可以看到其中lastEvent
包含_2
树nativeKeyTarget
顶部列出的内容。但我从那里去哪里?