本当の答えは、おそらくそうではないということです。これはリスナーをイベントにアタッチするために使用できますが、要素ごとに 1 つのリスナーのみをアタッチできます。このリスナーは、構成されているすべての dom イベントを取得します (「 」を参照DOM.sinkEvents
)。ページがアンロードされる前に、すべてのリスナーをデタッチする必要があります。そうしないと、一部のブラウザでメモリ リークが発生します。
代わりに、ウィジェット (およびサブクラス) を使用してイベントを管理することを強く検討してください。他のウィジェットを追加する基本ウィジェットである RootPanel は、ページから他のすべてのウィジェットを切り離して、メモリ リークを防ぎます。
さらに、目的のイベントの種類に基づいて、その中で発生するイベントを聞くことができます。たとえば、通常はマウスオーバー イベントを発生させない Label のようなウィジェットでも、ハンドラーをアタッチして通知を受け取ることができます。
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、ウィジェット、およびメモリ リークの詳細: