根据我最近问的这个问题:理解Document.createElement()
这是上下文:
- 在我的GWT GUI中有一个文本区域,其中包含一个文本
- 用户可以在此文本区域中选择一个单词(或一系列单词),并将其转换为
highlighted text
highlighted texts
需要能够倾听用户的声音:点击、右键单击、拖动&空投作业- 文本区域中有1000个
highlighted text
的场景并非不可能
我想知道 :
- 直接在GWT中操作DOM元素是一种糟糕的方法吗?(不使用小工具)
- 这样做是不是一种糟糕的方法,将监听器添加到SpanElement?它会导致内存泄漏吗
- 实现这些目标的最佳方法是什么?我用一个使用span元素的简单自定义小部件做了一些测试,在DevMode中,向RootPanel添加1000个小部件大约需要6到10秒。当我直接使用DOM元素时,这个操作持续时间不到1秒(优化后甚至不到200ms)
编辑
根据@Gilberto的建议,我做了一些真实的测试,性能应该不是问题。http://jmichelgarciagwt.appspot.com/DOMTesting.html
尽管如此,我还是很想得到问题1)和2)的反馈
向数百个span元素/小部件添加侦听器/处理程序肯定是一种糟糕的方法。
如果您继续使用GWT,您可以将单个事件处理程序附加到"文本区域"小部件,然后查找哪个元素是单击的来源:http://comments.gmane.org/gmane.org.google.gwt/61911
如果使用DOM元素,则可以将单个事件侦听器附加到"文本区域"元素,并在其冒泡时查找事件源。例如:http://icant.co.uk/sandbox/eventdelegation/