GWT 中的下沉事件--与其他 JS 框架的兼容性

发布于 2025-01-08 01:19:37 字数 534 浏览 1 评论 0原文

我注意到,在 GWT 的 DOMStandardImpl.java 中,通过在元素上设置 onevent 属性来引用事件调度程序来沉没事件。例如,

protected native void sinkEventsImpl(Element elem, int bits) /*-{
...
if (chMask & 0x00001) elem.onclick       = (bits & 0x00001) ?
        @com.google.gwt.user.client.impl.DOMImplStandard::dispatchEvent : null;
...
}-*/;

问题是这可能是与现有 JavaScript 代码和其他 JS 框架不兼容的根源。为什么他们使用 elem.onevent=func 方法而不是

elem.addEventListener('event',func,false);

允许开发人员向元素添加多个事件侦听器的首选方法?

谢谢。 特洛伊

I notice that in GWT's DOMStandardImpl.java, events are sunk by setting the onevent properties on the element to refer to an event dispatcher. e.g.,

protected native void sinkEventsImpl(Element elem, int bits) /*-{
...
if (chMask & 0x00001) elem.onclick       = (bits & 0x00001) ?
        @com.google.gwt.user.client.impl.DOMImplStandard::dispatchEvent : null;
...
}-*/;

The problem with that is that this may be a source of incompatibility with existing JavaScript code and other JS frameworks. Why do they use the elem.onevent=func method as opposed to the preferred

elem.addEventListener('event',func,false);

which would allow the developer to add multiple event listeners to the element?

Thanks.
Troy

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

拥醉 2025-01-15 01:19:37

GWT 的 DOMImpl 已经(至少在编写它们时)进行了基准测试,以根据浏览器使用最快的选项;这就是 DOMImplStandard 使用事件处理程序属性的原因(以及DOMImplOpera 没有 if chMask & 0x00001) 部分,因为在那里分配 onxxx 属性非常快)。

至于与其他框架的潜在不兼容性:

  1. GWT 的构建理念是它拥有它所创建的元素,因此如果您有一个第三方 JS 库搞乱了它,那是您的错(尝试同时使用它们)
  2. 它仍然可能是您在小部件内 wrap() 的元素(还包括 RootPanel.get(String)代码>),但是然后再说一遍,如果事情进展不顺利,你就要承担责任。
  3. 更重要的是,如果其他 JS 库不使用事件处理程序属性,那么在 GWT 中使用事件处理程序属性不会成为问题,而不是使用 addEventListener (或 IE 的 attachEvent)。因此,如果您确实存在不兼容/冲突,请首先责怪自己(见上文),然后责怪 GWT 和您的 JS 库。

简而言之:这不是问题。

GWT's DOMImpl have been (at least by the time they were written) benchmarked to use the fastest option depending on the browser; this is why DOMImplStandard uses event handler properties (and why DOMImplOpera doesn't have the if chMask & 0x00001) part, because assigning the onxxx property is so fast there).

As for the potential incompatibility with other frameworks:

  1. GWT is built around the idea that it owns the elements it creates, so if you have a third-party JS lib that messes up with it, it's your fault (for trying to use both of them at the same time)
  2. it could still be an issue with elements that you wrap() inside a widget (that also includes RootPanel.get(String)), but then again, you're held responsible if things don't play well together.
  3. more importantly, using event handler properties in GWT won't be an issue if the other JS libs don't use them, and isntead use addEventListener (or IE's attachEvent). So if you do have an incompatibility/conflict, first blame yourself (see above), then blame both GWT and your JS lib.

In brief: it's a non-issue.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文