什么是GWT的BrowserEvent和NativeEvent?

时间:2013-04-14 19:21:21

标签: events gwt

浏览器活动究竟是什么?例如,如果我有一个自定义小部件,其中包含一个覆盖onBrowserEvent的按钮。只有在单击按钮时才会调用onBrowserEvent方法。我认为所有事件都会调用此事件,例如onMouseOver,onMouseOut,KeyPressed等...

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

由于

1 个答案:

答案 0 :(得分:15)

GWT有 sunk 事件的概念。所有 sunk 事件,只有那些事件,会传递给EventListener onBrowserEvent

在最低级别,您使用DOM.setEventListener(或更近期{DOM.sinkEvents使用DOM.setBitlessEvents事件将EventListener附加到Element {3}})。为了避免内存泄漏(特别是 - 不仅仅是 - 在旧的IE中),您必须确保在页面卸载之前将Element EventListener设置为null

WidgetEventListener并为您处理其中的一些内容:它会自动调用DOM.setEventListeneronAttach中的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