4

使用 GWT 2.1,我正在尝试创建一个包含许多常量和常见样式的 CSS 文件。我想使用 ui:style 标签将其包含在 UiBinder 模板中:

<ui:UiBinder
  xmlns:ui='urn:ui:com.google.gwt.uibinder'
  xmlns:g='urn:import:com.google.gwt.user.client.ui'

  <ui:style field="css" src="constants.css" />
</ui:UiBinder>

我可以轻松地使用元素的样式:

<g:FlowPanel styleName="{css.panel}">...</g:FlowPanel>

但尝试在另一个 Style 块中使用常量失败:

<ui:Style>
  .templateSpecificStyle {
      background-color: {css.royalBlue};
      padding: 1em;
  }
</ui:Style>

奇怪的是我没有收到编译错误。创建了混淆的 CSS 类;但是,内容是空的。有没有办法在另一个 Style 块中访问这些 CSS 常量?是否可以使用旧的 ResourceBundle / CssResource 模式?

4

2 回答 2

7

重新阅读https://stackoverflow.com/questions/3533211/need-app-wide-css-constants-in-gwt/4143017#4143017后,我发现如果在样式块中添加特定于模板的样式,这些常量就可以工作:

<ui:Style src="constants.css">
  .templateSpecificStyle {
      background-color: royalBlue;
      padding: 1em;
  }
</ui:Style>

这非常适合我的需求。

于 2010-11-12T22:54:15.133 回答
4

在某个类中定义这些常量可能最符合您的利益,然后使用运行时替换将这个常量包含在您打算使用的每个 CSS 资源中。

CSSConstants.java

package com.foo.client;
public final class CSSConstants {
    public static final String ROYAL_BLUE = "#4169E1";
}

UiBinder 模板中的样式块

<ui:style>
  @eval royalBlue com.foo.client.ROYAL_BLUE
  .templateSpecificStyle {
    background-color: royalBlue
  }
</ui:style>

请注意,即使该技术的名称是“运行时替换”,GWT 编译器也将替换royalBlue为字符串文字,因为royalBlue可以在编译时评估 的值。

有关您可以在 CSS 资源中做的更酷的事情,请查看http://code.google.com/webtoolkit/doc/latest/DevGuideClientBundle.html#CssResource

于 2010-11-12T22:23:58.367 回答