我需要在几个用户界面活页夹模板中使用相同的样式,因此我按照https://developers.google.com/web-toolkit/doc/latest/DevGuideUiBinder#Using_an_external_resource中所述完成了所有操作。GWT共享CSS样式不起作用
所以我做了以下内容:
1.创建资源接口:
public interface Resources extends ClientBundle { @Source("shared.css") Style style(); public interface Style extends CssResource { String grayedOut(); } }
2.创建shared.css
文件在同一目录下的资源类:
.grayedOut{ background-color: red; }
3.增加with
元素为UI的Binder模板: <ui:with type="correct.package.Resources" field="res"/>
4.在UI活页夹模板中添加了对样式的引用:addStyleNames="{res.style.grayedOut}"
但是它不起作用。该视图呈现为与grayedOut样式完全不同。
但是我观察了两两件事:
- 在萤火/ Chrome浏览器开发工具,我可以看到,元素已分配对应我想添加一个风格样式ofuscated名称:
class="GAWERH0MI gwt-TabLayoutPanelContent"
(GAWERH0MI
似乎对应到我的grayedOut
类),但我无法找到它在“元素样式”面板,这可能意味着这个类是空的(没有正文)。 (我做过实验并将空类分配给元素,并在该工具中具有相同的效果)。 - 当我在.css中更改样式名称时,出现运行时错误,无法找到样式
grayedOut
,这似乎意味着我的样式类通常可以成功找到,但由于某种原因无法按预期工作。
谢谢,托马斯。但要拨打资源。style()我需要一个'Resources'实例,并且它由UIBinder内部化('您可以通过元素为您的模板提供资源,但以它们为您实例化为代价)“。说。那么何时/如何调用这种方法?另外可惜的是,在我连接的文档中有一些看起来像完整的工作示例,但没有提到调用'ensureInjected()',这对于此代码的工作非常重要:(。很容易浪费大量的实时复制来自不工作的文档的示例 –
2012-07-06 14:30:02
调用'ensureInjected'是一种痛苦,幸运的是,在CssResource的第二个实例上对'ensureInjected'的调用适用于相同类型的所有CssResources。在每个UiBinder的Java文件的顶部有一个快速的'static {GWT.create(); css.ensureInjected();}''''''''' ensureInjected在''编辑的ClientBundles的所有CssResource子代中自动调用。 –
2012-07-06 14:42:34
@PiotrSobczyk:它在https://developers.google.com/web-toolkit/doc/latest/DevGuideClientBundle#CssResource_Overview中记录 – 2012-07-06 14:47:12