浏览器事件到底是什么?例如,如果我有一个自定义小部件,其中包含一个覆盖 onBrowserEvent 的按钮。并且 onBrowserEvent 方法仅在您单击按钮时被调用。我认为这个事件是为所有事件调用的,例如 onMouseOver、onMouseOut、KeyPressed 等......
此外,当您添加 DomHandler 以使小部件侦听默认情况下不支持的事件时。在文档中它说“向小部件添加本机事件处理程序并接收相应的本机事件”在这种情况下,本机事件是什么意思?
谢谢
GWT 有一个沉没事件的概念。所有沉没的事件,但只有那些,被传递给EventListener
a onBrowserEvent
。
在最低级别,您将 an 附加EventListener
到Element
usingDOM.setEventListener
和sink事件DOM.sinkEvents
(或最近DOM.setBitlessEvents
)。为了避免内存泄漏(特别是——如果不仅是——在旧的 IE 中),你必须确保在页面卸载之前设置一个Element
's 。EventListener
null
AWidget
是 anEventListener
并为您处理其中一些事情:它自动调用DOM.setEventListener
它的onAttach
and onDetach
,并跟踪沉没的事件:它sinkEvents
是附加的,使其更易于使用,因此有一个unsinkEvents
对应物。
后来,在 GWT 1.6 中,添加了事件处理程序,并且addDomHandler
(最近addBitlessDomHandler
)使用适当的值自动调用 sinkEvents
(取自DomEvent.Type
作为参数传递的);为了完成所有这些工作,onBrowserEvent
in 小部件的默认行为是将事件分派给已注册的处理程序。
这些无位变体的原因是事件最初被称为int
位域中的常量,但是浏览器有越来越多的事件,因此 GWT 开始耗尽位。无位变体仅可用于不onDetach
泄漏的浏览器,因为与基于位的事件相反,小部件不会跟踪已注册的事件以从其注销它们。
从 GWT 1.6 开始的所有这些新DomEvent
s(及其处理程序)都是围绕 a 的包装器NativeEvent
。s有两种GwtEvent
:原生的 ( DomEvent
s),由浏览器分派,逻辑的由 GWT 自己分派,不映射到 DOM 级别的事件。addDomHandler
只关心DomEvent
s,也就是原生事件。
总结:当您退出刚刚修改的文本字段时,浏览器会调度一个change
事件。如果TextBox
小部件已经接收到该事件,onBrowserEvent
则将使用代表该事件的Event
(只是 的遗留子类)调用它。NativeEvent
then的默认实现onBrowserEvent
创建 aChangeEvent
并将其分派给已注册ChangeHandler
的 s。