什么是GWT的BrowserEvent和NativeEvent?

dat*_*ser 8 events gwt

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

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

谢谢

Tho*_*yer 15

GWT有沉没事件的概念.所有沉没事件,但只有那些被传递到EventListeneronBrowserEvent.

在最低级别,您将一个EventListener一个来Element使用DOM.setEventListener下沉的事件DOM.sinkEvents(或最近DOM.setBitlessEvents).为了避免内存泄漏(尤其是-如果不是在老的IE only-),你必须确保你设定ElementEventListenernull的页面卸载之前.

一个WidgetEventListener和处理少数的这些东西你:它会自动调用DOM.setEventListeneronAttach,并onDetach和它跟踪的沉没事件:它sinkEvents是添加剂,使其更易于使用,因此具有一个unsinkEvents对应.

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

这些无比变体的原因是事件最初被称为int域中的常量,但是浏览器具有越来越多的事件,因此GWT开始耗尽比特.该bitless变体只对那些浏览器使用泄露,因为小部件不遵守这些事件已被注册的方式从他们注销他们的轨道onDetach,与基于位的事件.

DomEvent从GWT 1.6开始的所有这些新的(带有处理程序)都是围绕a的包装器NativeEvent.有两种GwtEvents:DomEvent由浏览器分派的本地(s)和由GWT本身分派并且不映射到DOM级别的事件的逻辑的s .addDomHandler只关心DomEvents,又称本地事件.

结束语:当您退出刚修改的文本字段时,浏览器将调度一个change事件.如果TextBox小部件已经沉没该事件,onBrowserEvent则将使用表示该事件的Event(它只是遗留子类NativeEvent)来调用它.然后,默认实现onBrowserEvent创建一个ChangeEvent并将其分派给已注册的ChangeHandlers.

  • 英文动词:sink/sank/sunk.在GWT的上下文中,如果使用其代码作为参数调用了"sinkEvents",则事件为_sunk_. (2认同)