0

我正在努力将一些遗留代码更新到 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();
    }
}
4

1 回答 1

1

该代码看起来完全正确,但可能无法按您期望的方式运行 - 不是每个都ensureInjected()导致创建一个新<style>块,而是它们只是将它们需要可用的样式排入队列,并在当前事件循环结束时single<style>添加了所有各种收集的样式。这限制了文档可能需要重新设置样式的次数,并且还有助于减少样式标签的数量(旧 IE 有一个错误,即存在可能的最大标签数量)。

要确认这一点,请检查<style>标记的全部内容,您应该会看到两个 css 文件一个接一个地附加在那里。

于 2021-04-28T18:58:05.193 回答