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

4

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

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

谢谢

2个回答

7

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;
        }
    });

提醒一下,使用这种方式添加事件预览已经被弃用了。正确的做法是使用Event.addNativePreviewHandler(NativePreviewHandler handler)

1

来自 javadoc:

只要此预览保持在堆栈顶部,它将在事件被发送到其侦听器之前接收所有事件。请注意,事件预览将接收所有事件,包括由于冒泡而接收的事件,而普通事件处理程序仅接收明确下沉的事件。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接