我正在创建一个Anchor,如下所示:
Anchor a = new Anchor( "Click Me" );
然后我添加一个点击处理程序:
a.addClickHandler( new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
GWT.log("Anchor Clicked");
}
} );
我想将Anchor添加到LI元素中。由于我没有UL和LI的任何小部件,我使用以下结构:
public class ElementPanel extends ComplexPanel {
public ElementPanel(String tagName) {
setElement(DOM.createElement(tagName));
}
@Override
public void add(Widget w) {
add(w, getElement());
}
}
我创建了我的UL元素:
ElementPanel ul = new ElementPanel(UListElement.TAG);
我创建了一个LI元素:
ElementPanel li = new ElementPanel(LIElement.TAG);
我将我的Anchor添加到LI,然后我将LI添加到UL(之后我添加到文档中):
li.add(a);
ul.add(li);
这很好用。如果我改变了前面的行,如下所示,我没有看到日志消息:
li.getElement().appendChild(a.getElement());
ul.add(li);
同样,如果我试试这个,我也看不到消息:
li.add(a);
ul.getElement().appendChild(li.getElement());
以前,我在UIBinder中有UL元素。但由于我没有成功向Element添加点击处理程序,我不得不求助于上述方法。
答案 0 :(得分:1)
这是在GWT中处理事件的方式:小部件需要附加,这通常意味着将其添加到容器链中,直到RootPanel
。有关详细信息,请参阅https://code.google.com/p/google-web-toolkit/wiki/DomEventsAndMemoryLeaks#GWT's_Solution。
如果你的结构没有动态变化,拥有<ul><li>
的最简单方法就是使用HTMLPanel
(使用UiBinder会更容易)。
如果结构是动态的,那么可能会生成一个ComplexPanel
,其根元素为UListElement
,并将所有子窗口小部件包装成LIElement
。看看ComplexPanel
的内部,当面板本身是添加/删除子窗口小部件时,您会看到附加和分离子窗口小部件附加,或者附加 / 分离时。