如何将CSS文件动态加载到Flex应用程序中?

时间:2008-10-15 14:27:59

标签: css flex dynamic-css

我知道您可以使用CSS来使用StyleManager在Flex中设置对象样式:
http://livedocs.adobe.com/flex/3/html/help.html?content=styles_07.html

您还可以动态加载已编译的 CSS文件(SWF):
http://livedocs.adobe.com/flex/3/html/help.html?content=styles_10.html

但是,我正在使用Web GUI和服务器端脚本动态创建CSS文件。 如果更改了CSS,那么脚本还需要将CSS编译为SWF(这不是一个可行的选项)。有没有办法解决这个问题?

4 个答案:

答案 0 :(得分:3)

this comment中,在Adobe错误跟踪器 T中与此相关的问题。 Busser 正在为您描述可行的解决方案:

  

“我已经创建了一个小类,它将'解析'用CSS读取的CSS文件   HTTPService对象。它拆开了   由...返回的字符串   HTTPService对象,将其分解为   选择器,并创建一个新的   每个CSSStyleDeclaration对象   找到的选择器。一切都结束了   属性被分配给   它添加了CSSStyleDeclaration对象   到StyleManager。它没有   执行任何检查,你应该做   确保CSS文件格式正确,但是   99%的时间都足够了。   像@font,Embed()和   很难使用ClassReference()   由我的客户。他们确实需要   能够改变颜色和东西   像那样他们可以轻松地主题化   灵活应用到他们家   式“。

您可以尝试联系此人以寻求他们的解决方案,也可以使用this as3csslib project中的代码作为编写类似于他们所描述的内容的基础。

答案 1 :(得分:2)

您也可以像这样在flex中实现动态样式表。在这里我发现了这篇文章: http://askmeflash.com/article_m.php?p=article&id=6

答案 2 :(得分:2)

编辑:此解决方案不起作用。从解析器中取出的所有选择器都将转换为小写。这可能对您的应用程序有效,但可能不会......

我在这里留下这个答案,因为它可以帮助一些人寻找解决方案,并警告其他人这种方法的局限性。


请参阅我的问题:“Looking for CSS parser written in AS3”进行完整的讨论,但我发现隐藏在标准库中的CSS解析器。以下是如何使用它:

public function extractFromStyleSheet(css:String):void {

    // Create a StyleSheet Object
    var styleSheet:StyleSheet = new StyleSheet();
    styleSheet.parseCSS(css);

    // Iterate through the selector objects
    var selectorNames:Array = styleSheet.styleNames;
    for(var i:int=0; i<selectorNames.length; i++){

        // Do something with each selector
        trace("Selector: "+selelectorNames[i];

        var properties:Object = styleSheet.getStyle(selectorNames[i]);
        for (var property:String in properties){

            // Do something with each property in the selector
            trace("\t"+property+" -> "+properties[property]+"\n");
        }
    }
}

然后您可以使用以下方式应用样式:

cssStyle = new CSSStyleDeclaration();
cssStyle.setStyle("color", "<valid color>);
FlexGlobals.topLevelApplication.styleManager.setStyleDeclaration("Button", cssStyle, true);

答案 3 :(得分:0)

在Flex中,CSS的应用程序在编译时在服务器端处理,而不是在运行时在客户端处理。

我会为你看到两个选项(我不确定它们有多实用):

  1. 使用服务器端脚本将CSS编译为SWF,然后动态加载它们。
  2. 解析CSS样式表并使用flex中的setStyle函数来应用样式。这种方法的一个类似示例是Flex Style Explorer,您可以在其中查看source
  3. 祝你好运。