2012-10-09 142 views
1

可能重複:
ThemeChanger in GWT-Ext更改GWT主題動態

我有一個GWT應用, 我創建appBlueTheme.jar,appOrangeTheme.jar並添加到項目構建路徑的。 我module.gwt.xml文件有

.... 
<inherits name='appBlueTheme.appBlueTheme'/> 
<inherits name='appOrangeTheme.appOrangeTheme'/> 
... 

但在我的應用我看到appBlueTheme作爲GWT文檔的效果說

「繼承模塊將在他們列出的順序進行級聯」

我想要根據用戶響應更改主題。 我如何實現這一目標?

在此先感謝..

+0

看看這個:HTTP: //stackoverflow.com/questions/5603880/themechanger-in-gwt-ext – RAS

+0

這個問題是關閉的錯誤。建議的副本處理不同的框架 - GWT-Ext。 –

+0

@AndreiVolgin GWT-Ext框架僅用於採用用戶輸入來選擇主題。主動邏輯「動態主題更改」僅使用GWT完成。 – RAS

回答

3

如果「主題」你的意思是造型,正確的做法是不是爲每個主題一個單獨的jar,而是改用CSS。

答:如果您使用CSSResource,您可以使用條件CSS:

https://developers.google.com/web-toolkit/doc/latest/DevGuideClientBundle#Conditional_CSS

B.如果你使用的不是

.headerPanel { 
    background: blue; 
} 

外部CSS文件,你可以指定一個不同選擇基於主題背景:

.orangeTheme .headerPanel { 
    background: orange; 
} 
.blueTheme .headerPanel { 
    background: blue; 
} 

注您的代碼(或Ui:Binder)應該只將類「headerPanel」分配給小部件。當你啓動你的應用程序時,你將一個默認主題分配給你最外面的小部件(你添加到RootPanel的那個小部件)。例如,你設置了

myAppPanel.addStyleName("blueTheme"); 

這將給所有帶有「headerPanel」類的小部件一個藍色的背景。當用戶選擇不同的主題時,可以移除「blueTheme」類並添加「orangeTheme」類。它會自動刷新頁面(無需重新加載),所有樣式都會改變。

編輯:

如果你需要一個主題應用到整個應用程序,包括PopupPanel和對話框,使用此代碼以應用主題:

Document.get().getBody().setClassName("blueTheme"); 
+1

方法B應該在沒有頁面刷新的情況下工作,不是嗎?去'myAppPanel.removeStyleName(「blueTheme」); myAppPanel.addStyleName(「orangeTheme」);'應該觸發應用程序範圍的DOM元素重新渲染(還沒有嘗試過自己)。 –

+0

優秀的捕獲。我不是故意說「重新加載」頁面。我編輯了答案,以表明清楚。 –