3

現在、私はこのようなgwtで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をオーバーライドして、MyPinkThemedClientBundleという名前のインターフェイスを作成すると

interface MyClientBundle extends ClientBundle{

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

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

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

}

そしてもちろん、MyPinkCssResourceはMyCssResourceを拡張します

interface MyPinkCssResource extends MyCssResource{


} 

私が抱えている問題は、これをコンパイルしようとすると、GWTコンパイラが「css/mainPinkVersion.css」にスタイル名「someStyleThatNeverChanges」がないという文句を言うことです。私は、cssresourceインターフェースがそのスーパークラスのバッキングcssファイルを継承すると思っていたでしょう。そうでない場合は、CssResourceを拡張して、気になるクラスだけをオーバーライドできるという効果を実現できますが、それ以外の場合は、スーパークラスのバッキング.cssファイルを使用できますか?

4

1 に答える 1

6

私はほぼ正確にこの問題に遭遇しました。GWTドキュメントの@Importの例を読んだ後に思いついた解決策は次のとおりです。あなたの中で MyPinkThemedClientBundleあなたはcss()メソッドを次のように定義する必要があります:

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

すでに定義されているCSSエントリをオーバーライドするだけで、コードでアクセスする必要のある新しいCSSエントリを作成しない場合は、MyPinkCssResourceタイプは必要ありません。

于 2011-08-24T00:29:44.203 に答える