我很难用GWT的事件监听器模型连接所有点。假设您有一个Button小部件,当用户点击它时,您希望屏幕上的其他位置的文本从黑色变为红色(只是想到一个非常简单的示例)。
当用户单击Button时,按钮单击事件将放置在事件总线上,事件总线配置有处理程序/侦听器,希望在此事件发生时得到通知。这与Place
,PlaceChangeEvent
和GWT历史记录API有何关系?
如果有人代码提供了这个“往返”过程的超简单但功能代码示例,从按钮单击,到触发总线上的click事件,到处理公共汽车上的事件,更新适当的位置/历史对象,最后,将文本更改为红色,我想我可以连接许多当前缺失的点。提前谢谢!
答案 0 :(得分:0)
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);
}
}
如果你真的对调试它感兴趣,你可以看到“流程”,但是没有必要进行“手动往返”或任何事情。历史,BTW是一个单独的类,用于监听浏览器本身的前进和后退按钮,以及其他一些东西,但根本不需要做你提到的。