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

时间:2012-02-22 15:04:52

标签: events gwt onclick compatibility addeventlistener

我注意到在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);

允许开发人员向元素添加多个事件侦听器吗?

感谢。 特洛伊

1 个答案:

答案 0 :(得分:2)

GWT的DOMImpl已被(至少在他们编写时)基准使用最快的选项,具体取决于浏览器;这就是为什么DOMImplStandard使用事件处理程序属性(以及为什么DOMImplOpera没有if chMask & 0x00001)部分的原因,因为在那里分配onxxx属性的速度非常快。)

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

  1. GWT是围绕拥有它创建的元素的想法而构建的,所以如果你有一个与它混淆的第三方JS库,那就是你的错(试图同时使用它们)他们在同一时间)
  2. 它可能仍然是一个问题,你在一个小部件中wrap()(也包括RootPanel.get(String))中的元素,但是如果事情不能很好地结合在一起,你就会负有责任。
  3. 更重要的是,如果其他JS库不使用它们,在GWT中使用事件处理程序属性将不会成为问题,并且不使用addEventListener(或IE的attachEvent)。因此,如果您确实存在不兼容性/冲突,请首先责备自己(见上文),然后责怪两者 GWT和您的JS库。
  4. 简而言之:这不是问题。