0

我正在创建一个锚点,如下所示:

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 元素。但是由于我没有成功地向元素添加点击处理程序,我不得不求助于上述方法。

4

1 回答 1

1

这就是在 GWT 中处理事件的方式:需要附加小部件,这通常意味着将其添加到容器链中,直到RootPanel. 有关详细信息,请参阅https://code.google.com/p/google-web-toolkit/wiki/DomEventsAndMemoryLeaks#GWT's_Solution

<ul><li>如果你的结构没有动态改变,最简单的方法是使用一个HTMLPanel(使用 UiBinder 更容易)。

如果结构是动态的,那么可能会创建一个ComplexPanel根元素是 aUListElement并将所有子小部件包装到 a 中的 a LIElement。看一下 的内部结构ComplexPanel,您会发现它会在附加面板本身时添加/删除子小部件或附加/分离面板附加分离部件。

于 2013-05-12T12:43:08.540 回答