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



是否有一个特殊的qooxdoo类来动态加载CSS文件,就像qx.util.DynamicScriptLoader为JavaScript文件做的那样?

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

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

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

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

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

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

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

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

qx.bom.Stylesheet.includeFile(qx.util.ResourceManager.getInstance().toUri(
"resource/myframework/my.css"
));
为了避免多次加载css文件,我在包装器类中添加了一个静态类成员CSS_INCLUDED,初始化为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文件了。

最新更新