浏览器活动究竟是什么?例如,如果我有一个自定义小部件,其中包含一个覆盖onBrowserEvent的按钮。只有在单击按钮时才会调用onBrowserEvent方法。我认为所有事件都会调用此事件,例如onMouseOver,onMouseOut,KeyPressed等...
此外,当您添加DomHandler以使小部件侦听默认情况下不支持的事件时。它在文档中说“向窗口小部件添加本机事件处理程序并接收相应的本机事件”在这种情况下,本机事件是什么意思?
由于
答案 0 :(得分:15)
GWT有 sunk 事件的概念。所有 sunk 事件,只有那些事件,会传递给EventListener
onBrowserEvent
。
在最低级别,您使用DOM.setEventListener
(或更近期{DOM.sinkEvents
使用DOM.setBitlessEvents
和汇事件将EventListener
附加到Element
{3}})。为了避免内存泄漏(特别是 - 不仅仅是 - 在旧的IE中),您必须确保在页面卸载之前将Element
EventListener
设置为null
。
Widget
是EventListener
并为您处理其中的一些内容:它会自动调用DOM.setEventListener
和onAttach
中的onDetach
,并且跟踪沉没事件:其sinkEvents
是附加的,以便于使用,因此具有unsinkEvents
对应物。
稍后,在GWT 1.6中,添加了事件处理程序,addDomHandler
(以及最近addBitlessDomHandler
)使用适当的值自动调用sinkEvents
(取自{{1作为参数传递);为了使所有这些工作,小部件中DomEvent.Type
的默认行为是将事件分派给已注册的处理程序。
这些无比变体的原因是事件最初在位域中被称为onBrowserEvent
常量,但浏览器有越来越多的事件,因此GWT开始用完比特。 无位变体仅适用于 not 泄漏的浏览器,因为小部件不会跟踪已注册哪些事件以从其{注销>注册它们{1}},与基于比特的事件相反。
所有这些以GWT 1.6开头的新int
(及其处理程序)都是围绕onDetach
的包装器。有两种DomEvent
s:本地的(NativeEvent
s),由浏览器调度,逻辑由GWT本身调度并且未映射到DOM级别的事件。 GwtEvent
仅关注DomEvent
s,又称原生事件。
结束语:当您退出刚修改的文本字段时,浏览器会调度addDomHandler
事件。如果DomEvent
窗口小部件 sunk 该事件,则将change
调用TextBox
onBrowserEvent
(这只是Event
的遗留子类)代表那个事件。然后,NativeEvent
的默认实现会创建一个onBrowserEvent
并将其发送到已注册的ChangeEvent
。