最好用一个例子来描述这个问题。
我的GWT应用程序中有以下ClientBundle:
interface Resources extends ClientBundle {
public static final Resources INSTANCE = GWT.create(Resources.class);
@Source("defines.css")
Defines defines();
@Source("appStyle.css")
@CssResource.NotStrict
Style style();
interface Style extends CssResource {
String appLogo();
(...)
}
interface Defines extends CssResource {
String formInputBackgroundColor();
String formInputBorderColor();
(...)
}
}
appStyle.css
是应用程序使用的主样式表,而defines.css
是仅包含常量的样式表:
@def formInputBackgroundColor #D8ECFD;
@def formInputBorderColor #7FAAFF;
(...)
现在我可以在UIBinder模板和应用程序代码中使用defines.css
样式表中的常量而不会出现问题,但我不能在appStyle.css
中使用这些常量。
我已尝试将interface Style extends CssResource
替换为interface Style extends Defines
,希望继承Defines
样式表可以让我访问“子”Style
样式表中的常量,但是GWT编译器抱怨错误如下:
Rebinding my.project.client.resources.Resources
Creating assignment for style()
Replacing CSS class names
The following obfuscated style classes were missing from the source CSS file:
formInputBorderColor: Fix by adding .formInputBorderColor{}
formInputBackgroundColor: Fix by adding .formInputBackgroundColor{}
(...)
有没有办法实现这个目标?
答案 0 :(得分:1)
我找到了一种方法,但它远非优雅,我宁愿使用其他解决方案,例如使用某种继承或注释,如果可能的话。
我开始工作的方式是@eval
defines.css
appStyle.css
样式表中@eval formInputBackgroundColor Resources.INSTANCE.defines().formInputBackgroundColor();
@eval formInputBorderColor Resources.INSTANCE.defines().formInputBorderColor();
所需的每一个常量,但这会导致大量代码重复,这对于十个分量。
{{1}}
如果您有更好的解决方案,请分享。
答案 1 :(得分:1)
更换
@Source("appStyle.css")
与
@Source({"defines.css", "appStyle.css"})
应该做的伎俩。通过指定两个css文件,style()
将成为两者的联合。