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

gol*_*dim 2 css qooxdoo dynamic-script-loading

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

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

lev*_*420 5

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

qx.bom.Stylesheet.includeFile("https://myserver.com/my.css");
Run Code Online (Sandbox Code Playgroud)

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

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

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

/*
 * @asset(myframework/my.css)
 */
Run Code Online (Sandbox Code Playgroud)

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

  qx.bom.Stylesheet.includeFile(qx.util.ResourceManager.getInstance().toUri(
    "resource/myframework/my.css"
  ));
Run Code Online (Sandbox Code Playgroud)

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

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

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