如何在qooxdoo中动态加载CSS文件

How to load CSS file in qooxdoo dynamically

是否有一个特殊的 qooxdoo class 可以像 qx.util.DynamicScriptLoader 动态加载 JavaScript 文件那样动态加载 CSS 文件?

例如,取决于用户选择他想使用什么地图,应用程序加载特定的 JavaScript 和 CSS 文件。我可以通过 qx.util.DynamicScriptLoader class 获取 .js 文件,但是对于 css 我使用 Manifest.json 文件中的 externalResources 部分,它总是加载样式文件(是我对吗?)。

包含 css 文件的动态可能性,例如在 class 的构造函数中,像这样使用 qx.bom.Stylesheet.includeFile

qx.bom.Stylesheet.includeFile("https://myserver.com/my.css");

通过这种方式,我已经成功地为 packages/frameworks 构建了完全动态的包装器,其中所有外部资源仅在包装器 class 实例化上与 qx.util.DynamicScriptLoader.

一起加载

如果 css 文件在您的项目资源中,您必须调用 qx.util.ResourceManager.getInstance().toUri() 资源名称,然后将其输入 qx.bom.Stylesheet.includeFile.

假设您在 resource/myframework/my.css 的项目中有一个 css 文件,您必须首先在包装器 class 中创建一个像这样的 @asset 提示:

/*
 * @asset(myframework/my.css)
 */

之后,例如在您调用的构造函数中:

  qx.bom.Stylesheet.includeFile(qx.util.ResourceManager.getInstance().toUri(
    "resource/myframework/my.css"
  ));

为了避免多次加载 css 文件,我添加了一个静态 class 成员 CSS_INCLUDED 到包装器 class,初始化为 false 并且然后在调用 qx.bom.Stylesheet.includeFile 后设置为 true,这会导致以下代码:

  if(my.wrapper.CSS_INCLUDED === false) {
    qx.bom.Stylesheet.includeFile(qx.util.ResourceManager.getInstance().toUri(
      "resource/myframework/my.css"
    ));
    my.wrapper.CSS_INCLUDED = true;
  }

这样后续实例化不会再次加载 css 文件。