为什么 Handler 在侦听器完成工作时不工作?



我很难在著名的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!");
    }
});

听众将有效,但处理程序不行。

  1. 那么差异在哪里烤?
  2. 以及如何迫使处理程序工作?
  3. 是否有某种方法可以在处理程序上执行此操作?

我试图了解听众和处理者之间的区别。我读了这些答案,这表明没有很大的区别,但我仍然不明白

按钮不是元素,如果将其添加为DOM的元素,则会丢失事件。您可以将其附加到rootpanel: RootPanel.get().add(button)如果要使用处理程序。

如果您想使用元素而不是小部件,则可以使用DOM.createButton(),并使用侦听器。

widgets的 setEventListener仅在"连接"时称呼它们(与亲本窗口小部件,本身已连接或延迟直到附加到附加),并且您永远不会"连接"按钮。

使用明确的serEventListener,您可以完全绕过小部件内部(和生命周期)。实际上,您可以在这种情况下只使用ButtonElement

tl; dr:不要那样做,这是设计破裂的症状。

相关内容

  • 没有找到相关文章

最新更新