如何在GWT HTMLPanel下包装元素

时间:2012-02-09 16:09:33

标签: gwt

假设我使用一些HTML创建HTMLPanel

<p>
   Blah blah <span id='1'>more html... </span>
</p>

现在我想将一个事件处理程序附加到span。我希望将其视为InlineHTML GWT小部件。我试过了:

HTMLPanel html = new HTMLPanel(stringOfHTML);
parentWidget.add(html);
String id = "1";
Element span = html.getElementById(id);
InlineHTML wid = InlineHTML.wrap(span);  // -- error here
html.addAndReplaceElement(wid, id);

倒数第二行死于断言错误:具有现有父窗口小部件的窗口小部件可能无法添加到分离列表

有没有办法将子元素包装在HTMLPanel

这是GWT 2.4。

注意

经过一些评论和回答后,我意识到我忘了提到:通常UiBinder就是答案,但我没有使用它,因为输入是非程序员在另一个上下文中创建的html文本。

2 个答案:

答案 0 :(得分:2)

不,不是真的。您收到此异常是因为<span>元素已经是某个小部件的一部分。 wrap方法只能用于在不属于其他窗口小部件的元素之上创建窗口小部件。如果要处理此范围的点击,可以将dom处理程序添加到HTMLPanel,然后检测单击了哪个元素。

答案 1 :(得分:0)

将您的<span>转换为UiBinder模板中的InlineLabel,并附上您想要的任何内容:)。