2009-09-09 76 views
1

我們有大量GWT項目和許多較小GWT子項目 基本上大控制器項目調用經由許多裝置,如一些被併入到iframe了在頁面中示出的小項目 , 有些是通過點擊一個URL並將該項目打開到一個新窗口顯示。GWT間項目通信

的要求是動態更改的CSS,這是可能的主要項目, 通過簡單地改變,在飛行中,包含樣式表URL

link標籤的href是有可能傳播完成這個子項目的變化呢? 或以更廣泛的方式提問, 我如何在GWT中實現項目間的溝通?

回答

2

如果不同的GWT應用程序的域相同,瀏覽允許您調用跨IFrame的Javascript代碼。

使用JSNI,您可以在窗口對象上註冊方法,該窗口對象將回調到GWT應用程序中,並使用JSNI另一個項目可以調用此方法。

+0

 good solution, working on it. I have achieved one thing, the parent can initially notify the child via url parameters since it is indeed loading it in iframes. However, for refreshing/change notification, i am thinking of implementing your approach. +1 for this great solution 
2009-09-09 12:32:52

+0

嘿jsni的方法是在一個senario,不同的窗口失敗。我有一個登錄模塊,成功將頁面url更改爲另一個gwt模塊。在這種情況下,javascript全局變量值會丟失[有意義,因爲窗口本身已經改變,然後window.variable不再在範圍內],在這種情況下應該怎麼做?使用cookie? – 2009-12-29 06:50:39

+0

主框架可以偵聽重新加載事件並重新註冊回調。客戶端可以在加載時提供可用的方法,即主框架可以調用。有很多選擇。 – 2010-01-14 08:59:18

1

如果所有的應用程序都來自同一個域,您可以將樣式表的名稱存儲在cookie中。然後,每個應用程序將使用該Cookie來選擇適當的樣式表。

String theme = Cookies.getCookie("THEME"); 
if (theme == null) { 
    theme = "default"; 
} 

Element e = DOM.createElement("link"); 
DOM.setElementProperty(e, "rel", "stylesheet"); 
DOM.setElementProperty(e, "href", GWT.getModuleBaseURL() + currentTheme + 
    ".css"); 
DOM.appendChild(getHead(), e); 

private native Element getHead() /*-{ 
    return $doc.getElementsByTagName('head')[0]; 
}-*/; 
+0

嗨,我覺得你誤解了這個問題,Cookies是一種很好的方式來存儲一些常見的東西,但是我的問題在這裏調用,父母應該調用/通知孩子將其Css改爲別的東西。 還是不錯的建議吧,+1 – 2009-09-09 12:27:41