2011-05-10 141 views
3

目前我有使用這樣的GWT CssResource應用...人會究竟是如何重寫CssResource

interface MyClientBundle extends ClientBundle{ 

@Source("images/one.png") 
Image someImageThatAlwaysLooksTheSame(); 

@Source("images/two.png") 
Image someImageThatDependingOnTheClientThemeChanges(); 

@Source("css/main.css") 
MyCssResource css(); 

} 

然後是CssResource接口

interface MyCssResource extends CssResource{ 

String someStyleThatNeverChanges(); 

String someStyleThatChangesDependingOnTheClient(); 

} 

如果我重寫MyClientBundle創建和稱爲MyPink主題客戶端的接口

interface MyClientBundle extends ClientBundle{ 

@Source("images/one.png") 
Image someImageThatAlwaysLooksTheSame(); 

@Source("images/**twoPinkVersion**.png") 
Image someImageThatDependingOnTheClientThemeChanges(); 

@Source("css/**mainPinkVersion**.css") 
MyPinkCssResource css(); 

} 

然後當然MyPinkCssResour CE擴展MyCssResource

interface MyPinkCssResource extends MyCssResource{ 


} 

我的問題是,當我嘗試編譯這個GWT編譯器抱怨說,「CSS/mainPinkVersion.css」缺少樣式名稱「someStyleThatNeverChanges」。我會認爲一個cssresource接口會繼承它的超類的後援css文件。如果情況並非如此,是否有可能實現擴展CssResource並覆蓋您關心的類的效果,但是否則使用超類的後備.css文件?

回答

6

我遇到了這個問題。我在閱讀the @Import example in the GWT documentation後提出的解決方案如下。在你MyPinkThemedClientBundle您需要定義的CSS()方法:

@Source({"main.css", "css/**mainPinkVersion**.css"}) 
MyCssResource css(); 

如果你只是覆蓋已定義的CSS條目,而不是創建需要在代碼中訪問,那麼你將不再需要任何新的MyPinkCssResource類型。

+0

我得到「錯誤:標註來源缺少的屬性值值」時,我嘗試有2個逗號分隔的css文件。試過GWT 2.5.1和2.6.0。實際上這來自Netbeans下的Java編譯器,而不是GWT編譯器。你有同樣的問題嗎? – Budric 2014-04-16 16:25:58

+0

像@Source({「main.css」,「myPinkVersion.css」})將值放在大括號中(因爲註釋被定義爲String [])可以避免java編譯器錯誤。我不確定你們是如何在你的系統上編譯它,而不是得到這些錯誤。 – Budric 2014-04-16 17:29:41

+0

@Budric - 感謝您的信息。我更新了答案。 – 2014-04-23 01:43:02