1

在这个问题之后我最近问过: 了解 Document.createElement()

这是上下文:

  • 我的 GWT GUI 中有一个文本区域,其中包含一个文本
  • 用户可以在此文本区域中选择一个单词(或一系列单词)并将其转换为highlighted text
  • highlighted texts需要能够听用户:点击、右键、拖放操作
  • 文本区域中有 1000 个的场景highlighted text并非不可能。

我想知道

  1. 直接在 GWT 中操作 DOM 元素是一种不好的方法吗?(不使用小部件)
  2. 将侦听器添加到 SpanElement是一种不好的方法吗?它会导致内存泄漏吗?
  3. 实现这些目标的最佳方法是什么?我已经使用一个使用 span 元素的简单自定义小部件进行了一些测试,在 DevMode 中将 1000 个小部件添加到 RootPanel 大约需要 6 到 10 秒。当我直接使用 DOM 元素时,此操作持续时间不到 1 秒(经过优化甚至不到 200 毫秒)。

编辑

根据我在@Gilberto 建议后所做的一些实际测试,性能应该不是问题。http://jmichelgarciagwt.appspot.com/DOMTesting.html

尽管如此,我还是希望得到问题 1) 和 2) 的反馈

4

1 回答 1

3

将侦听器/处理程序添加到数百个跨度元素/小部件绝对是一种不好的方法。

如果您继续使用 GWT,您可以将单个事件处理程序附加到您的“文本区域”小部件,然后查找哪个元素是点击的来源: http: //comments.gmane.org/gmane.org.google。重量/61911

如果您使用 DOM 元素,您可以将单个事件侦听器附加到您的“文本区域”元素,并在它冒泡时找出事件源。例如:http: //icant.co.uk/sandbox/eventdelegation/

于 2012-09-20T23:39:20.230 回答