8

我想将一些颜色定义为 GWT CssResource 中的常量,并在我的应用程序中使用这些常量;但我不知道该怎么做。

我会告诉你我尝试了什么。我创建了一个 ClientBundle 和一个 CssResource,如下所示:

public interface Resources extends ClientBundle {
  public interface MyStyle extends CssResource {
    String JUNGLEGREEN();
    String example();
    ...
  }
  @Source("Resources.css")
  MyStyle css();
}

我在 Resources.css中定义了一些常量:

@def JUNGLEGREEN #1F3D0A;

在 Resources.css 中,我像这样使用这些常量:

.example { color:JUNGLEGREEN; }

我不知道在其他 CSS 文件和 UiBinder 模板中重用这些常量的方法。我想在其他一些 UiBinder 文件中执行此操作,例如 LoginView.ui.xml:

<ui:with field='resources' type='com.example.Resources' />
<ui:style>
  .mainPanel {
    background:{resources.css.JUNGLEGREEN};
    ...
  }
</ui:style>

...但它似乎没有编译。你知道我怎样才能实现我的目标吗?

4

3 回答 3

4

这是我们的做法:

  • 我们将所有常量属性放在一个constant.css文件中
@def black #241b15;   /* text color */
@def orange #ff4f00;   /* links */
  • 在每个 ui.xml 文件中,您可以通过以下方式引用这些常量:
<ui:style src="../../resources/css/constants.css">
    .myStyle {
        color: orange;
    }
</ui:style>

希望有帮助。

编辑:

要避免<ui:style>元素中的相对路径,您可以执行以下操作:

  • 在 css 文件中再次定义常量(比如constants.css
@def junglegreen #1f3d0a;
  • 创建一个ClientBundleCssResource检索定义的常量
public interface MyResources extends ClientBundle {

    public static final MyResources INSTANCE = GWT.create(MyResources.class);

    public interface Constants extends CssResource {

        String junglegreen();
    }

    Constants constants();
}

- 使用@eval注解访问常量

<ui:style>
    @eval green com.gwt.client.widget.test.MyResources.INSTANCE.constants().junglegreen();

    .someClass {
        color: green;
    }
</ui:style>

我知道如何在不引用 css 文件本身的情况下处理常量的唯一方法。

于 2010-11-10T09:37:37.777 回答
1

我知道这个答案可能有点晚,但可能会对某人有所帮助。我遇到了同样的问题,并且能够通过添加以下内容来解决它:

Resources.css().ensureInjected()

我在工厂中添加了它,但在几个地方尝试过,无论我把它放在哪里,它都有效。

于 2012-08-06T18:15:26.763 回答
0

你应该可以使用

<ui:style>
  @IMPORT url("../../../global.css");
  .mainPanel {
    background:{resources.css.JUNGLEGREEN};
    ...
  }
</ui:style>
于 2010-08-20T20:26:07.133 回答