我是GWT的新手;我正在构建一个小样本应用程序。我有几个CSS文件。我能够成功使用ClientBundle和CssResource为我的UiBinder脚本中定义的元素分配样式。
现在我想更进一步,使用@def css-rule引入CSS常量。当我定义一个常量并在同一个CSS文件中使用它时,@ define非常有用。但是我不能在另一个CSS文件中使用它。当我尝试使用@eval规则来评估现有常量时,编译器会抛出一个execption:“无法对非静态方法进行静态引用”。
以下是我正在尝试做的一个例子:
@def BACKGROUND red;
package abc;
import ...;
interface ConstantStyle extends cssResource {
String BACKGROUND();
}
@eval BACKGROUND abc.ConstantStyle.BACKGROUND();
.myClass {background-color: BACKGROUND;}
package abc;
import ...;
interface ConstantStyle extends cssResource {
String myClass;
}
package abc;
import ...;
interface MyResources extends ClientBundle {
@Source("ConstantStyle.css")
ConstantStyle constantStyle();
@Source("MyStyle.css")
MyStyle myStyle();
}
提前致谢!
答案 0 :(得分:4)
将"ConstantStyle.css"
添加到@Source
中的ClientBundle
注释中,如下所示:
package abc;
import ...;
interface MyResources extends ClientBundle {
@Source("ConstantStyle.css")
ConstantStyle constantStyle();
@Source({"ConstantStyle.css", "MyStyle.css"})
MyStyle myStyle();
}
它与MyStyle.css中的@import "ConstantStyle.css"
相同(除了@import
被GWT忽略,我相信)。
您不需要@eval。
答案 1 :(得分:2)
我在代码中执行此操作的方法是简单地引用MyStyle.css
中的常量,即:
.myClass {background-color: BACKGROUND;}
我不完全确定为什么会这样,可能是因为两个CSS文件都以正确的顺序注入。否则,我尝试在MyStyle.css
的顶部添加以下内容,它也有效:
@import url("ConstantStyle.css");