gpt4 book ai didi

GWT 将 ClickHandler 添加到 DOM 元素

转载 作者:行者123 更新时间:2023-12-04 08:00:08 26 4
gpt4 key购买 nike

假设我有一个具有 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!");
}

}

当我尝试像这样添加这个小部件时:
    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 元素附加到另一个元素上,而不做其他任何事情。通过执行以下操作,您应该能够使事件在第二种情况下工作:

Element element = testWidget.getElement();
RootPanel.getBodyElement().appendChild(element);
DOM.sinkEvents(element,
Event.getTypeInt(ClickEvent.getType().getName())
| DOM.getEventsSunk(element);

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

关于GWT 将 ClickHandler 添加到 DOM 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3081158/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com