Gwt EventHandler和SinkEvents是否执行相同的功能性工作?
我正在使用GWT。我开始通过添加EventHandler向我的小部件添加事件 事件处理程序示例代码:Gwt EventHandler和SinkEvents是否执行相同的功能性工作?,gwt,Gwt,我正在使用GWT。我开始通过添加EventHandler向我的小部件添加事件 事件处理程序示例代码: widget.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { // do something } }); 然后我发现有另一种方法可以使用sinkEvents()处理事件 接收器事件示
widget.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
// do something
}
});
然后我发现有另一种方法可以使用sinkEvents()处理事件
接收器事件示例代码():
我不是GWT专家,但我通过查看GWT源代码得出以下结论:
sinkEvents()
sinkEvents()
是较低级别的,是围绕本机javascript事件处理的浏览器抽象包装
EventHandler构建在sinkEvents之上,因此它们提供sinkEvents所提供的所有功能
但从使用角度看,它们是不同的:使用EventHandler,您可以使用驻留在不同类中的不同事件处理程序注册不同的事件类型。事件将自动路由到适当的处理程序。使用sinkEvents,您可以注册不同的事件类型(通过int,不是类型安全的),但始终会调用此小部件的onBrowserEvent(event)
{
...
sinkEvents(Event.ONMOUSEDOWN | Event.ONMOUSEUP | Event.ONMOUSEOVER |Event.ONMOUSEOUT)
...
}
public void onBrowserEvent(Event event) {
Element td = getEventTargetCell(event);
if (td == null) return;
Element tr = DOM.getParent(td);
switch (DOM.eventGetType(event)) {
case Event.ONMOUSEDOWN: {
// do something
break;
}
case Event.ONMOUSEUP: {
// do something
break;
}
case Event.ONMOUSEOVER: {
// do something
break;
}
case Event.ONMOUSEOUT: {
// do something
break;
}
}
}