GWT にはサンクイベントという概念があります。沈められたすべてのイベントが に渡されますが、それらのイベントのみが に渡されEventListenerますonBrowserEvent。
最下位レベルでは、 を using にアタッチEventListenerしElement、イベントをDOM.setEventListenerシンクしDOM.sinkEventsます(または最近ではDOM.setBitlessEvents)。メモリ リークを回避するには (特に、古い IE だけでなくても)、ページをアンロードする前に を必ず設定する必要Elementがあります。EventListenernull
AWidgetは でありEventListener、これらのいくつかを処理します。自動的DOM.setEventListenerにそのonAttachおよび を呼び出し、沈没イベントonDetachを追跡します。これは、作業を容易にするために追加されているため、対応するものがあります。sinkEventsunsinkEvents
その後、GWT 1.6 でイベント ハンドラーが追加され、addDomHandler(最近では)適切な値 (引数として渡されたものから取得addBitlessDomHandler) で自動的に呼び出さ れます。そして、このすべてを機能させるために、ウィジェット内のデフォルトの動作は、登録されたハンドラーにイベントをディスパッチすることです。sinkEventsDomEvent.TypeonBrowserEvent
これらのビットレスバリアントの理由は、イベントがもともとintビットフィールドの定数として参照されていたからですが、ブラウザーにはますます多くのイベントが含まれるため、GWT でビットが不足し始めました。ビットベースのイベントとは対照的に、ウィジェットはどのイベントがそのように登録されているかを追跡せず、.onDetach
GWT 1.6 以降のこれらすべての新しいDomEvent(ハンドラーを含む) は、 a のラッパーNativeEventです。2 種類の があります。ブラウザによってディスパッチされるGwtEventネイティブのもの ( ) と、GWT 自体によってディスパッチされ、DOM レベルでイベントにマップされない論理的なものです。s 、別名ネイティブ イベントのみに関心があります。DomEventaddDomHandlerDomEvent
まとめ: 変更したばかりのテキスト フィールドを終了すると、ブラウザーはchangeイベントを送出します。TextBoxウィジェットがそのイベントを沈めた場合、そのイベントを表すonBrowserEventで呼び出されますEvent(これは の単なるレガシー サブクラスですNativeEvent)。thenのデフォルトの実装はonBrowserEvent、 を作成し、ChangeEventそれを登録済みの にディスパッチしChangeHandlerます。