java - GWT 使用多个 CssResources 初始化 ClientBundle
问题描述
我正在努力将一些遗留代码更新到 GWT 2,我遇到了一些奇怪的行为。我有一个根据 gwt 文档扩展 ClientBundle 的自定义接口。在该包中,我定义了几个 CssResources 来指向我的模块的各种 .css 文档。当我去实际初始化我的模块时,问题就来了。我在初始化程序中有一些代码可以获取对每个 CssResource 的静态引用并调用 ensureInjected()。问题是,只有第一个调用实际上做任何事情。任何后续调用似乎都被忽略了,css 样式也没有添加到应用程序中。我需要做什么才能为单个模块处理多个 css 文档?
CssBundle.java
public interface CssBundle extends ClientBundle {
public static final CssBundle INSTANCE = (CssBundle) GWT.create(CssBundle.class);
/* CSS */
@Source("mypath/public/Client.css")
public ClientCss mainCSS();
@Source("mypath/resources/css/mini/ext-all.css")
public ExtAllCss extAllCSS();
}
ClientCss.java
public interface ClientCss extends CssResource {
String applicationTitle();
String branding();
String bugReportDirections();
@ClassName("Caption")
String caption();
}
ExtAllCss.java
public interface ExtAllCss extends CssResource {
@ClassName("close-icon")
String closeIcon();
@ClassName("close-over")
String closeOver();
@ClassName("col-move-bottom")
String colMoveBottom();
}
我的模块.java
public class MyModule extends Composite
{
public void initialize()
{
//this css shows up in the client
CssBundle.INSTANCE.mainCSS().ensureInjected();
//this does nothing
CssBundle.INSTANCE.extAllCSS().ensureInjected();
}
}
解决方案
该代码看起来完全正确,但可能无法按您期望的方式运行 - 不是每个都ensureInjected()
导致创建一个新<style>
块,而是它们只是将它们需要可用的样式排入队列,并在当前事件循环结束时single<style>
添加了所有各种收集的样式。这限制了文档可能需要重新设置样式的次数,并且还有助于减少样式标签的数量(旧 IE 有一个错误,即存在可能的最大标签数量)。
要确认这一点,请检查<style>
标记的全部内容,您应该会看到两个 css 文件一个接一个地附加在那里。
推荐阅读
- nginx - MiniKubeerror 验证副本集:ValidationError(ReplicaSet.spec.template.metadata):unknown field"spec" in io.k8s.apimachinery.pkg.apis.meta.v1
- javascript - 在新的 Reducer 中未定义状态
- c# - 不能在匿名类型中使用 sum
- nginx - nginx proxy_pass 省略路径
- node.js - 为什么nodejs命令没有用crontab执行
- c# - 使用c#将xsd转换为xml时,没有为“xmlns”添加前缀?
- npm - 防止 Yarn install 在项目中运行(即强制 NPM 安装)
- php - 无法在 laravel 5.8 中更新一对多关系中的表
- android - 如何在第三方应用程序中使用 libcore icu 代码
- php - 寻求帮助以修复 php 脚本错误