我目前正在尝试在 CssResource 文件中使用条件 CSS,如此处所述,但我对“ <deferred-binding-property>
”部分有点不清楚。
这些属性必须在哪里定义?我想认为<define-property>
当前正在编译的模块的继承树中的任何标记都是可用的,但这似乎不是真的。我真的在网上找不到任何关于此的文档。
就我而言,我正在处理的项目由两个应用程序组成,每个应用程序都有自己的 GWT 模块,但它们都继承了一个包含共享代码的“核心”模块,包括带有@if
语句的 ClientBundle/CssResource。我希望评估的延迟绑定属性在另一个 gwt 模块文件formfactor.gwt.xml中定义。
我正在尝试使用以下内容:
@if formfactor mobile{
.wrapper{
top:50px;
}
}
一切 gwt 编译没有任何错误。模块文件本身基于“formfactor”属性的任何延迟绑定都被正确评估(即,我正在按预期获得“移动”特定的视图)。块中没有任何 css 规则@if
被注入。
我已经尝试在核心 gwt.xml 文件和应用程序 gwt.xml 文件中继承 formfactor.gwt.xml,并且都按照上一段中的描述工作。
如果我@else
在 CssResource 文件中包含一条语句,则@else
块中的代码确实会被注入,但如果我包含@elif formfactor desktop tablet
(为 formfactor 属性定义的唯一其他两个值),则不会注入@if
块和@elif
块。
更新
- 虽然我仍然认为明确回答问题会很有用,但我的 CssResource 文件似乎确实在范围内具有 formfactor 属性。该问题似乎与 GWT 问题 4697 ( code.google.com/p/google-web-toolkit/issues/detail?id=4697
) 有关,其中 @if/@elif/@else 语句的最后一个子句总是被注入,而不管被评估的 deferred-binding-property 的值如何。
在我的情况下,一种解决方法是简单地在普通 css 中设置“标准”值,然后手动更改 @if 块中的值,例如:
.wrapper{
top:66px;
...
}
@if formfactor mobile {
.wrapper{
top:50px;
}
}
只要您不在条件内使用@def 语句,则仅当条件评估为真时才会注入第二条规则。
我意识到这可能不适用于所有 css 规则,因为它本质上为规则定义了第二个值而不删除第一个值,但这只是一种解决方法!