events - GWT 的 BrowserEvent 和 NativeEvent 到底是什么?

标签 events gwt

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

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

谢谢

最佳答案

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

在最低级别,您附加一个 EventListenerElement使用 DOM.setEventListener 并使用 DOM.sinkEvents 接收事件(或最近 DOM.setBitlessEvents )。为避免内存泄漏(尤其是——如果不仅是——在旧 IE 中),您必须确保设置了 ElementEventListenernull在页面卸载之前。

一个 WidgetEventListener并为您处理其中一些事情:它会自动调用 DOM.setEventListener在其onAttachonDetach ,并且它会跟踪沉没事件:它的 sinkEvents是添加剂以使其更易于使用,因此具有 unsinkEvents对方。

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

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

所有这些新的DomEvent从 GWT 1.6 开始的 s(及其处理程序)是 NativeEvent 的包装器。 .有两种GwtEvent s:原生的(DomEvent s),由浏览器分派(dispatch),逻辑的由 GWT 自己分派(dispatch),不映射到 DOM 级别的事件。 addDomHandler只关注DomEvent s,又名原生事件。

总结:当您退出刚刚修改的文本字段时,浏览器会发送一个 change事件。如果 TextBox小部件已经沉没了该事件,它的 onBrowserEvent将使用 Event 调用(它只是 NativeEvent 的遗留子类)代表该事件。 onBrowserEvent 的默认实现然后创建一个 ChangeEvent并将其发送到已注册的ChangeHandler s。

关于events - GWT 的 BrowserEvent 和 NativeEvent 到底是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16003277/

相关文章:

java - GWT TreeItem(String) 构造函数

java - GWT 小部件之间的换行符

java - 如何在服务器和 GWT 客户端之间使用 RSA?

javascript - 如何正确处理 JavaScript 事件中的关闭?

javascript - 检测使用 jQuery 更改的禁用属性

java - 如何将元素转换为小部件?

java - 组合 TimeItem 和 DateItem 值

java - 有没有办法让接口(interface)代码在运行时运行?

javascript - 无法绑定(bind)点击事件

python - 扭曲的 XmlStream : How to connect to events?