为什么 Handler 在 Listener 工作时不工作?
Why Handler doesn't work while Listener does his job?
我很难在著名的 DOM.appendChild 之后赶上事件。在多次尝试使用处理程序后,我发现 this answer @Õzbek 通过侦听器完成工作。
现在我不明白为什么 "listener" 有效而 "handler" 无效。
作为代码中的示例:
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!");
}
});
侦听器将工作但处理程序不工作。
- 那么他们的区别在哪里呢?
- 以及如何强制处理程序工作?
- 有什么方法可以在处理程序上执行此操作吗?
我正在尝试了解侦听器和处理程序之间的区别。 I read these answers 这表明没有太大区别,但我还是不明白
Button 是一个 Widget 而不是一个元素,如果您将它作为一个元素添加到 dom 中,您将丢失事件。您可以将它附加到 RootPanel:
RootPanel.get().add(button)
如果您想使用处理程序。
如果您想使用元素而不是小部件,您可以使用 DOM.createButton()
,并使用侦听器。
setEventListener
的小部件仅在它们 "attached" 时被调用(对于父小部件,它本身已附加,或者延迟直到它被附加),而你永远不会 "attach"按钮。
通过显式 serEventListener
您可以完全绕过小部件内部(和生命周期)。在这种情况下,您实际上可以只使用 ButtonElement
。
TL;DR:不要那样做,这是设计有问题的表现。
我很难在著名的 DOM.appendChild 之后赶上事件。在多次尝试使用处理程序后,我发现 this answer @Õzbek 通过侦听器完成工作。 现在我不明白为什么 "listener" 有效而 "handler" 无效。 作为代码中的示例:
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!");
}
});
侦听器将工作但处理程序不工作。
- 那么他们的区别在哪里呢?
- 以及如何强制处理程序工作?
- 有什么方法可以在处理程序上执行此操作吗?
我正在尝试了解侦听器和处理程序之间的区别。 I read these answers 这表明没有太大区别,但我还是不明白
Button 是一个 Widget 而不是一个元素,如果您将它作为一个元素添加到 dom 中,您将丢失事件。您可以将它附加到 RootPanel:
RootPanel.get().add(button)
如果您想使用处理程序。
如果您想使用元素而不是小部件,您可以使用 DOM.createButton()
,并使用侦听器。
setEventListener
的小部件仅在它们 "attached" 时被调用(对于父小部件,它本身已附加,或者延迟直到它被附加),而你永远不会 "attach"按钮。
通过显式 serEventListener
您可以完全绕过小部件内部(和生命周期)。在这种情况下,您实际上可以只使用 ButtonElement
。
TL;DR:不要那样做,这是设计有问题的表现。