感謝您的建議。我們計劃重新審視我們的導航機制,「活動與地點」看起來像是一種非常整潔的做事方式。現在,我們通過針對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。