感谢您的建议。我们计划重新审视我们的导航机制,“活动与地点”看起来像是一种非常整洁的做事方式。现在,我们通过针对EventBus触发的事件进行导航,该事件总线由Navigation类侦听并相应地指导导航。
我已经通过JSNI进行了沟通。但是,我遇到了一个烦人的问题。新的窗口进行呼叫:
public native void fireCrossBrowserEvent(GwtEvent<?> event) /*-{
$wnd.opener.fireCrossBrowserEvent(event);
}-*/;
其中要求在主窗口中此方法:
$wnd.fireCrossBrowserEvent = $entry(function(event) {
$wnd.alert("fireCrossBrowserEvent: " + event);
@my.application.client.event.EventBus::fireEvent(Lcom/google/gwt/event/shared/GwtEvent;)(event);
});
的呼叫:
public static void fireEvent(GwtEvent<?> event) {
System.out.println("fireEvent: " + event);
bus.fireEvent(event);
}
我结束了使用谷歌AutoBean同步和desynchronise通过JSNI发送的事件。所有的作品很好。另外,为了回到子窗口的通信,我必须创建一个新的Native方法来替换GWT的Window.open方法,以便它返回对新窗口的引用。 javascript函数返回对新窗口的引用,但由于某种原因,GWT的包装器返回void。