真正的答案是你可能不知道。虽然这可用于将侦听器附加到事件,但您只能为每个元素附加一个侦听器 - 侦听然后获取所有已配置的 dom 事件(请参阅DOM.sinkEvents
) - 并且您负责确保在页面卸载之前分离所有侦听器,否则某些浏览器会泄漏内存。
相反,强烈考虑使用 Widget(和子类)来管理事件。RootPanel 是其他人应该添加到的基本小部件,它将管理从页面中分离所有其他小部件以防止内存泄漏。
此外,您可以根据您所关注的事件类型来监听其中发生的事件。例如,即使在像 Label 这样通常不会触发 mouseover 事件的小部件上,您仍然可以附加处理程序并获取通知:
Label label = new Label();
label.addDomHandler(new MouseOverHandler() {
@Override
public void onMouseOver(MouseOverEvent event) {
// do something
}
}, MouseOverEvent.getType());
RootPanel.get().add(label);
在大多数情况下,您将使用现有的支持方法,例如 Button 来获取点击事件 - 已经有方便的方法供您使用,这要归功于以下接口HasClickHandlers
:
Button button = new Button();
button.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
// do something
}
});
panel.add(button);
有关 GWT、Widget 和内存泄漏的更多信息: