GWT - проблемы с константами в css - PullRequest
3 голосов
/ 15 апреля 2010

Я новичок в GWT; Я создаю небольшой пример приложения. У меня есть несколько файлов CSS. Я могу успешно использовать ClientBundle и CssResource для назначения стилей элементам, определенным в моем сценарии UiBinder.

Теперь я хотел бы сделать еще один шаг и представить CSS-константы, используя @def css-rule. @Def прекрасно работает, когда я определяю константу и использую ее в том же файле CSS. Однако я не могу использовать его в другом файле CSS. Когда я пытаюсь использовать правило @eval для оценки существующей константы, компилятор вызывает исключение: «не может сделать статическую ссылку на нестатический метод».

Вот пример того, что я пытаюсь сделать:

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 ]

4 голосов
/ 06 апреля 2012

Добавьте "ConstantStyle.css" к аннотации @Source в ClientBundle, например:

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

    @Source({"ConstantStyle.css", "MyStyle.css"})
    MyStyle myStyle();
}

Он делает то же самое, что и @import "ConstantStyle.css" в MyStyle.css (за исключением того, что @import игнорируется GWT, я полагаю).

Тебе не нужен @ eval.

2 голосов
/ 15 апреля 2010

Способ, которым я делаю это в своем коде, заключается в простом обращении к константе в MyStyle.css, т.е.

.myClass {background-color: BACKGROUND;}

Я не совсем уверен, почему это работает, возможно, потому что оба CSS-файла вставляются в правильном порядке. В противном случае я попытался добавить следующее в верхней части MyStyle.css, и это тоже работает:

@import url("ConstantStyle.css");
...