GWT - css中常量的问题

时间:2010-04-14 23:27:07

标签: css gwt constants

我是GWT的新手;我正在构建一个小样本应用程序。我有几个CSS文件。我能够成功使用ClientBundle和CssResource为我的UiBinder脚本中定义的元素分配样式。

现在我想更进一步,使用@def css-rule引入CSS常量。当我定义一个常量并在同一个CSS文件中使用它时,@ define非常有用。但是我不能在另一个CSS文件中使用它。当我尝试使用@eval规则来评估现有常量时,编译器会抛出一个execption:“无法对非静态方法进行静态引用”。

以下是我正在尝试做的一个例子:

ConstantStyle.css

@def BACKGROUND red;

ConstantStyle.java

package abc;
import ...;
interface ConstantStyle extends cssResource {
         String BACKGROUND();
}

MyStyle.css

@eval BACKGROUND abc.ConstantStyle.BACKGROUND();
.myClass {background-color: BACKGROUND;}

MyStyle.java

package abc;
import ...;
interface ConstantStyle extends cssResource {
         String myClass;
}

MyResources.java

package abc;
import ...;
interface MyResources extends ClientBundle {
    @Source("ConstantStyle.css")
     ConstantStyle constantStyle();

    @Source("MyStyle.css")
    MyStyle myStyle();
}

提前致谢!

2 个答案:

答案 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");