GWT事件预览与事件处理程序

时间:2011-08-16 09:17:17

标签: events gwt handler preview

我的问题是,GWT中的事件预览和事件处理程序之间有什么不同。

还有一个用于事件预览的回调函数boolean onEventPreview(Event event)和一个回调函数void onBrowserEvent(Event event)。它们非常相似,所以它们之间有什么不同?特别是当事件处理程序工作正常时,我应该何时使用事件预览?

感谢

2 个答案:

答案 0 :(得分:6)

DOM.addEventPreview(EventPreview preview)允许您在事件堆栈的顶部放置事件预览,该事件堆栈在触发任何onBrowserEvent(Event event)之前调用。这样,您可以在事件触发发生之前放置一些逻辑。您甚至可以通过返回false来阻止事件触发。例如,下面的示例可以防止浏览器对mousemove和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 :(得分:1)

来自javadoc:

  

只要此预览保留在堆栈顶部,它就会在向其侦听器触发之前接收所有事件。请注意,事件预览将接收所有事件,包括因冒泡而收到的事件,而普通事件处理程序仅接收明确的沉没事件。

您可以从onEventPreview返回false以取消事件,在这种情况下,不会触发事件处理程序。