2011-08-16 96 views
4

我的問題是,GWT中的事件預覽與事件處理程序有什麼不同。GWT事件預覽與事件處理程序

還有一個用於事件預覽的回調函數boolean onEventPreview(Event event)以及一個回調函數void onBrowserEvent(Event event)。它們非常相似,所以它們有什麼不同?特別是當事件處理程序工作完美時,我應該使用事件預覽嗎?

感謝

回答

6

DOM.addEventPreview(EventPreview preview)可讓您在事件堆棧頂部放置事件預覽,在任何onBrowserEvent(Event event)被觸發之前調用事件堆棧。這樣,您可以在事件觸發發生之前放置一些邏輯。你甚至可以通過返回false來防止事件發生。例如下面的例子阻止瀏覽器反應,鼠標移動和的mousedown事件。(點擊並拖動圖像,瀏覽器將無法拖動圖像的輪廓)

DOM.addEventPreview(new EventPreview() { 
     @Override 
     public boolean onEventPreview(Event event) { 
      switch (DOM.eventGetType(event)){ 
       case Event.ONMOUSEDOWN: 
       case Event.ONMOUSEMOVE: 
        event.preventDefault(); 
      } 
      return true; 
     } 
    }); 

只是一個提醒,加入eventPreviews這樣折舊。正確的方法是使用Event.addNativePreviewHandler(NativePreviewHandler handler)

1

根據JavaDoc:

只要這個預覽保留在堆棧的頂部,它將接收所有的事件,他們被解僱了他們的聽衆面前。請注意,事件預覽將接收所有事件,包括由於冒泡而收到的事件,而普通事件處理程序僅接收顯式沉沒事件。

您可以從onEventPreview返回false就取消事件,在這種情況下,事件處理程序不會被解僱。