我很难将所有点与 GWT 的事件监听器模型连接起来。假设您有一个 Button 小部件,当用户单击它时,您希望屏幕上其他位置的文本从黑色变为红色(仅考虑一个 super 简单的示例)。
当用户单击按钮时,按钮单击事件将被放置在事件总线上,该事件总线配置有希望在该事件发生时收到通知的处理程序/监听器。这如何与 Place
、PlaceChangeEvent
和 GWT History API 联系起来?
如果有人代码提供了这个“往返”过程的 super 简单但功能强大的代码示例,从按钮单击,到在总线上触发单击事件,再到处理总线上的事件,更新适当的地点/历史对象,最后将文本更改为红色,我想我能够连接许多当前缺失的点。提前致谢!
最佳答案
GWT 有多种类型的事件,真正理解它们并不容易。有些事件仅在逻辑中发生,其他事件来自 DOM(并且可以在 capture or bubbling 中使用),等等。
每次只走一步,因为您似乎试图将不同的事件混合在一起。 (按钮单击和历史事件是完全独立的事件)。一般来说,这个想法是许多类提供不同类型的事件,并且您为您关心的事件连接处理程序。然后,您的处理程序可以调用其他类或生成其他事件。您想要的代码实际上非常简单,这是您的项目中唯一需要的类:
public class Sandbox_gwt implements EntryPoint
{
public void onModuleLoad()
{
final Label label = new Label("I'm red");
label.getElement().getStyle().setBackgroundColor("#FF9999");
Button button = new Button("click me!");
button.addClickHandler(new ClickHandler()
{
@Override
public void onClick(ClickEvent event)
{
label.getElement().getStyle().setBackgroundColor("#99FF99");
label.setText("I'm green");
}
});
RootPanel.get().add(label);
RootPanel.get().add(button);
}
}
如果您真的有兴趣通过调试它,您可以看到“流程”,但不需要执行“手动往返”或任何操作。历史,顺便说一句,是一个单独的类,用于监听浏览器本身中的前进和后退按钮,以及其他一些东西,但根本没有必要执行您提到的操作。
关于java - GWT:带有按钮单击的往返示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13079695/