8

浏览器事件到底是什么?例如,如果我有一个自定义小部件,其中包含一个覆盖 onBrowserEvent 的按钮。并且 onBrowserEvent 方法仅在您单击按钮时被调用。我认为这个事件是为所有事件调用的,例如 onMouseOver、onMouseOut、KeyPressed 等......

此外,当您添加 DomHandler 以使小部件侦听默认情况下不支持的事件时。在文档中它说“向小部件添加本机事件处理程序并接收相应的本机事件”在这种情况下,本机事件是什么意思?

谢谢

4

1 回答 1

15

GWT 有一个沉没事件的概念。所有沉没的事件,但只有那些,被传递给EventListenera onBrowserEvent

在最低级别,您将 an 附加EventListenerElementusingDOM.setEventListenersink事件DOM.sinkEvents(或最近DOM.setBitlessEvents)。为了避免内存泄漏(特别是——如果不仅是——在旧的 IE 中),你必须确保在页面卸载之前设置一个Element's 。EventListenernull

AWidget是 anEventListener并为您处理其中一些事情:它自动调用DOM.setEventListener它的onAttachand onDetach,并跟踪沉没的事件:它sinkEvents是附加的,使其更易于使用,因此有一个unsinkEvents对应物。

后来,在 GWT 1.6 中,添加了事件处理程序,并且addDomHandler(最近addBitlessDomHandler)使用适当的值自动调用 sinkEvents(取自DomEvent.Type作为参数传递的);为了完成所有这些工作,onBrowserEventin 小部件的默认行为是将事件分派给已注册的处理程序。

这些无位变体的原因是事件最初被称为int位域中的常量,但是浏览器有越来越多的事件,因此 GWT 开始耗尽位。无变体仅可用于onDetach泄漏的浏览器,因为与基于位的事件相反,小部件不会跟踪已注册的事件以从其注销它们。

从 GWT 1.6 开始的所有这些新DomEvents(及其处理程序)都是围绕 a 的包装器NativeEvent。s有两种GwtEvent:原生的 ( DomEvents),由浏览器分派,逻辑的由 GWT 自己分派,不映射到 DOM 级别的事件。addDomHandler只关心DomEvents,也就是原生事件

总结:当您退出刚刚修改的文本字段时,浏览器会调度一个change事件。如果TextBox小部件已经接收到该事件,onBrowserEvent则将使用代表该事件的Event(只是 的遗留子类)调用它。NativeEventthen的默认实现onBrowserEvent创建 aChangeEvent并将其分派给已注册ChangeHandler的 s。

于 2013-04-14T21:48:11.360 回答