2013-04-14 61 views
7

瀏覽器事件到底是什麼?例如,如果我有一個自定義小部件,其中包含一個覆蓋onBrowserEvent的按鈕。而onBrowserEvent方法只在點擊按鈕時調用。我認爲這個事件被稱爲所有的事件,如onMouseOver,onMouseOut,KeyPressed等...GWT的BrowserEvent和NativeEvent究竟是什麼?

此外,當你添加DomHandler,使一個小部件收聽一個事件不支持作爲默認。在文檔中,它說:「向小部件添加本機事件處理程序並吸收相應的本地事件」在本上下文中,本機事件的含義是什麼?

感謝

回答

13

GWT有沉沒事件的概念。所有沉沒事件,但只有這些,傳遞給EventListeneronBrowserEvent

在最低級別,您安裝EventListenerElement使用DOM.setEventListener事件與DOM.sinkEvents(或最近DOM.setBitlessEvents)。爲了避免內存泄漏(特別是 - 如果不僅在舊IE中),您必須確保在頁面卸載之前設置了ElementEventListenernull

一個WidgetEventListener和處理少數的這些東西給你:它會自動調用DOM.setEventListeneronAttachonDetach,它跟蹤的沉沒事件:其sinkEvents是添加劑,使其更易於使用,因此有一個unsinkEvents副本。

後來,在GWT 1.6,已添加的事件處理程序,並addDomHandler(以及最近addBitlessDomHandler)自動調用sinkEvents用適當的值(從DomEvent.Type作爲參數傳遞截取);爲了使所有這些工作成功,小部件中的onBrowserEvent的默認行爲是將事件分派給註冊的處理程序。

之所以這些bitless變種的事件最初被稱爲一個位域int常量,但瀏覽器有越來越多的事件,以便GWT拔腿就跑出位。 bitless變體僅適用於而非泄漏的瀏覽器,因爲小部件不會跟蹤哪些事件已被註冊,從而將它們從其onDetach註銷,與基於位的事件相反。

以GWT 1.6開頭的所有這些新的DomEvent s(以及它們的處理程序)都是NativeEvent的包裝。有兩種GwtEvent s:本地的(DomEvent s),由瀏覽器調度,邏輯由GWT本身調度並且沒有映射到DOM級別的事件。 addDomHandler只關注DomEvent s,又名本地事件

總結:當您退出剛剛修改的文本字段時,瀏覽器會發送一個change事件。如果TextBox小部件有沉沒該事件,其onBrowserEvent將與Event(這只是NativeEvent的傳統子類)代表該事件調用。然後,onBrowserEvent的默認實現將創建一個ChangeEvent並將其發送到註冊的ChangeHandler

+0

什麼是沉沒事件?當你說「小部件已經沉沒該事件」時,這意味着什麼? – Mayumi

+2

英文動詞:sink/sank /沉沒。在GWT的上下文中,如果已使用其代碼作爲參數調用了「sinkEvents」,則該事件爲_sunk_。 –

+0

@ThomasBroyer Wah .... tahkns在gwt事件上的另一個迷你教程:) –