我很难在著名的dom.appendchild之后捕捉事件。经过多次使用处理程序之后,我找到了这个答案, @ @Zbek通过听众完成了这项工作。现在我不明白为什么"侦听器"在"处理程序"而行不通。作为代码的示例:
Button button = new Button("Test button");
DOM.appendChild(getElement(), button.getElement());
button.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
GWT.log("this doesn't work");
}
});
DOM.sinkEvents(button.getElement(), Event.ONCLICK);
DOM.setEventListener(button.getElement(), new EventListener() {
public void onBrowserEvent(Event event) {
GWT.log("this works perfectly!");
}
});
听众将有效,但处理程序不行。
- 那么差异在哪里烤?
- 以及如何迫使处理程序工作?
- 是否有某种方法可以在处理程序上执行此操作?
我试图了解听众和处理者之间的区别。我读了这些答案,这表明没有很大的区别,但我仍然不明白
按钮不是元素,如果将其添加为DOM的元素,则会丢失事件。您可以将其附加到rootpanel: RootPanel.get().add(button)
如果要使用处理程序。
如果您想使用元素而不是小部件,则可以使用DOM.createButton()
,并使用侦听器。
widgets的 setEventListener
仅在"连接"时称呼它们(与亲本窗口小部件,本身已连接或延迟直到附加到附加),并且您永远不会"连接"按钮。
使用明确的serEventListener
,您可以完全绕过小部件内部(和生命周期)。实际上,您可以在这种情况下只使用ButtonElement
。
tl; dr:不要那样做,这是设计破裂的症状。