我需要在几个UI Binder模板中使用相同的样式,因此我按照以下步骤完成:https://developers.google.com/web-toolkit/doc/latest/DevGuideUiBinder#Using_an_external_resource。
所以我做了以下事情:
1. 创建资源接口: public interface Resources extends ClientBundle { @Source("shared.css") Style style();
public interface Style extends CssResource { String grayedOut(); } }
2. 在与Resources类相同的目录中创建shared.css文件:
.grayedOut{ background-color: red; }
3. 在UI Binder模板中添加with元素: 4. 在UI Binder模板中添加样式引用:
addStyleNames="{res.style.grayedOut}"
但是它不起作用。视图呈现的方式就像grayedOut样式根本没有应用一样。
但是我观察到了两件事情:
1. 在Firebug / Chrome Dev Tools中,我可以看到元素分配了一个对应于我正在尝试添加的样式的混淆样式名称:
2. 当我更改.css中的样式名称时,然后我会收到运行时错误,指示找不到样式
所以我做了以下事情:
1. 创建资源接口: public interface Resources extends ClientBundle { @Source("shared.css") Style style();
public interface Style extends CssResource { String grayedOut(); } }
2. 在与Resources类相同的目录中创建shared.css文件:
.grayedOut{ background-color: red; }
3. 在UI Binder模板中添加with元素: 4. 在UI Binder模板中添加样式引用:
addStyleNames="{res.style.grayedOut}"
但是它不起作用。视图呈现的方式就像grayedOut样式根本没有应用一样。
但是我观察到了两件事情:
1. 在Firebug / Chrome Dev Tools中,我可以看到元素分配了一个对应于我正在尝试添加的样式的混淆样式名称:
class="GAWERH0MI gwt-TabLayoutPanelContent"
(GAWERH0MI
似乎对应于我的grayedOut
类),但我无法在“元素样式”面板中找到它,这可能意味着此类为空(没有主体)。 (我进行了实验,并将空类分配给具有相同效果的元素)。2. 当我更改.css中的样式名称时,然后我会收到运行时错误,指示找不到样式
grayedOut
,这似乎意味着我的样式类通常被成功找到,但由于某种原因无法按预期工作。
ensureInjected
很麻烦。幸运的是,在同一类型的所有CssResource上,对第二个实例的ensureInjected
调用适用。我已经在每个UiBinder的Java文件顶部快速添加了static {GWT.create(); css.ensureInjected();}
。@Thomas Broyer:自动在所有<ui:with>
的ClientBundles的CssResource子项上调用ensureInjected
会更方便(而且不会更昂贵?)。 - Riley Lark@UiField Resources res
,它将注入<ui:with field="res">
的值,并在调用createAndBindUi
后调用res.style().ensureInjected()
。自动调用ensureInjected()
会意味着将行为添加到<ui:with>
和/或{expansions}
中,这些都是完全通用的(更不用说您需要GWT.create
ClientBundle
而不是CssResource
,并且您可以在UiBinder模板中使用定义在ClientBundle
中的任何/所有CssResource
)。因此,不会发生这种情况。 - Thomas Broyer@UiField
жқҘиҝһжҺҘXMLе’ҢJavaзҡ„иө„жәҗе®һдҫӢгҖӮж„ҹи°ўдҪ зҡ„жҸҗзӨәпјҒ - Riley Larkfield=""
属性的ui:*
元素(如ui:with
、ui:style
等)以及任何其他带有ui:field=""
属性的元素,provided=true
对它们也同样适用。 - Thomas Broyer