Events 如何获得包装给定DOM元素的GWT小部件?

Events 如何获得包装给定DOM元素的GWT小部件?,events,dom,gwt,widget,Events,Dom,Gwt,Widget,当点击事件发生时,我想确定我的哪个小部件被点击了。请注意,出于性能原因,我特别不想将单击处理程序添加到我的每个小部件中 获取单击的元素很容易(它将是本机事件的事件目标),但是如何找到相应的小部件?它没有标准功能,好吧。但您可以用与GWT的com.google.GWT.user.client.ui.Tree类类似的方法来完成 基本上,它是通过首先收集从根小部件的元素到单击的小部件的元素的元素的元素链来实现的(请参见树类中的私有方法collectionElementChain)。通过这个元素链,小部

当点击事件发生时,我想确定我的哪个小部件被点击了。请注意,出于性能原因,我特别不想将单击处理程序添加到我的每个小部件中


获取单击的元素很容易(它将是本机事件的事件目标),但是如何找到相应的小部件?

它没有标准功能,好吧。但您可以用与GWT的
com.google.GWT.user.client.ui.Tree
类类似的方法来完成

基本上,它是通过首先收集从根小部件的元素到单击的小部件的元素的元素的元素链来实现的(请参见树类中的私有方法
collectionElementChain
)。通过这个元素链,小部件可以从根小部件向下遍历到单击的小部件(请参见树类中的私有方法
findItemByChain


这适用于Tree,因为每个小部件/元素的子级的小部件和元素索引匹配,并且因为它只允许将特定小部件设置为TreeItem。

实际上,您可以使用或
DOM.getEventListener(元素)获取与小部件主元素关联的小部件
方法,返回与元素关联的小部件


您可以在另一个线程中查看我对一些工作代码的响应:

如果您将单击处理程序添加到所有小部件中,是否存在明显的性能问题?一旦编译成JavaScript,GWT点击事件和“本机”事件的速度将不会有明显差异。简短回答:不会。但对我来说,一次点击处理程序(在DOM树的高级)将优于数千次。以这种方式利用事件冒泡难道不是一件好事吗?我不认为一个必须迭代一组可能的单击小部件的单片单击处理程序比利用浏览器的事件调度系统更好。不要给自己额外的工作,放弃使用GWT附带的对点击处理程序的支持的便利性,除非你有一个真正的、经过测试的问题,这将是一个解决方案。你知道,我认为你是对的。我将在每个小部件上放置一个单击处理程序。