3

我需要在一些 UI Binder 模板中使用相同的样式,所以我按照以下说明进行了所有操作:https ://developers.google.com/web-toolkit/doc/latest/DevGuideUiBinder#Using_an_external_resource 。

所以我做了以下事情:

1、创建资源界面:

公共接口资源扩展 ClientBundle {
    @Source("shared.css")
    风格风格();

    公共接口样式扩展 CssResource {
        字符串 grayedOut();
    }
}

shared.css2.在与资源类相同的目录中创建文件:

.grayedOut{
    背景颜色:红色;
}

with3. UI Binder模板 新增元素:<ui:with type="correct.package.Resources" field="res"/>

4、在UI Binder模板中增加了对样式的引用:addStyleNames="{res.style.grayedOut}"

但是它不起作用。视图被渲染,就像 grayedOut 样式根本没有应用一样。

但我观察到两件事:

  1. 在 Firebug/Chrome 开发工具中,我可以看到该元素分配了一个与我要添加的样式相对应的滥用样式名称:(class="GAWERH0MI gwt-TabLayoutPanelContent"似乎GAWERH0MI对应于我的grayedOut类)但我无法在“元素样式”面板中找到它可能意味着这个类是空的(没有主体)。(我做了实验并将空类分配给在该工具中具有相同效果的元素)。
  2. 当我在 .css 中更改样式名称时,出现运行时错误,即grayedOut找不到样式,这似乎意味着我的样式类通常已成功找到,但由于某种原因无法按预期工作。
4

2 回答 2

3

您可能忘记调用实例ensureInjected()Resources.Style

这是为 a 自动完成的<ui:style>(因为您不编写ClientBundleandCssResource接口,它们是由 UiBinder 为您生成的),但不会为任何其他CssResource.

不过,您可以使用@UiField Resources res它,它将被注入 的值<ui:with field="res">,因此res.style().ensureInjected()在调用createAndBindUi.
IMO,但是您最好将Resources实例注入您的视图并使用@UiField(provided=true),因此请确保ensureInjected()在将实例注入您的视图之前调用它,或者选择ensureInjected()在您的每个视图中调用。如https://developers.google.com/web-toolkit/doc/latest/DevGuideUiBinder#Share_resource_instances

于 2012-07-06T14:14:55.873 回答
2

ui小部件java文件:

@UiField
Resources res;
public YourWidget() {
        initWidget(uiBinder.createAndBindUi(this));     
        res.style().ensureInjected();
    }

ui 小部件 xml 文件:

<ui:with field='res' type="your path to Resource class" />

<g:Label addStyleNames="{res.style.grayedOut}" ui:field="icon"></g:Label>
于 2012-09-26T13:33:15.417 回答