GWT将ClickHandler添加到DOM元素

前端之家收集整理的这篇文章主要介绍了GWT将ClickHandler添加到DOM元素前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我有一个具有ClickHandler的自定义小部件.这是一个例子:
public class TestWidget extends Composite {

private static TestWidgetUiBinder uiBinder = GWT
        .create(TestWidgetUiBinder.class);

interface TestWidgetUiBinder extends UiBinder<Widget,TestWidget> {
}

@UiField
Button button;

public TestWidget(String firstName) {
    initWidget(uiBinder.createAndBindUi(this));
    button.setText(firstName);
}

@UiHandler("button")
void onClick(ClickEvent e) {
    Window.alert("Hello!");
}

}

当我尝试添加这个Widget时:

TestWidget testWidget = new TestWidget("myTestWidget");
    RootPanel.get().add(testWidget);

一切都好.如果我点击我的按钮,我会得到我期望的消息.
但是,如果我这样添加

TestWidget testWidget = new TestWidget("myTestWidget");
    RootPanel.getBodyElement().appendChild(testWidget.getElement());

我的点击事件没有被解雇.我很难理解为什么.
如果有人可以向我解释这个或将我链接到我可以阅读的资源,那将是很好的.最后我想知道是否有可能添加clickhandler后我添加了子事件,如果建议这样.谢谢你提前寻求帮助.

裤裤

解决方法

当您调用add()时,将在添加到面板的窗口小部件上调用Widget.onAttach(). onAttach做了一些工作来注册小部件来接收事件. appendChild()只是将一个DOM元素附加到另一个DOM元素,而不执行任何其他操作.通过这样做,您应该能够在第二种情况下获取事件:
Element element = testWidget.getElement();
RootPanel.getBodyElement().appendChild(element);
DOM.sinkEvents(element,Event.getTypeInt(ClickEvent.getType().getName())
    | DOM.getEventsSunk(element);

但是,我没有对此进行测试,我不建议您在实际应用程序中使用它.使用add()绝对是首选,使用appendChild()以这种方式没有任何优势,可能会导致意外行为.

猜你在找的HTML相关文章