是否有像getClassInfo这样的方法包含样式?

时间:2015-01-31 22:03:55

标签: actionscript-3 flex flex4

我使用以下代码来获取包含有关应用程序对象的元数据的对象,但它似乎并不是列出样式。

var classinfo:Object = ObjectUtil.getClassInfo(FlexGlobals.topLevelApplication);

有没有办法包含样式?并跟进问题,如果有,有没有办法表明样式是在本地声明还是在基类中继承/声明?

1 个答案:

答案 0 :(得分:0)

我认为您可能无法理解样式在Flex中的工作方式。

mxmlc编译器在生成样式代码时会删除[Style]元数据标记。您可以通过添加-keep-generated-actionscript=true编译器参数并在输出目录中查找生成的文件夹来验证这一点。 (例如bin-debug)。在那里看一下[YourAppName] -generated.as文件。您将看到它将所有样式元数据转换为actionscript。

以下是一些从styleManager转储所有样式信息的代码。

for each(var selector:String in styleManager.selectors) {
    var cssStyle:CSSStyleDeclaration = styleManager.getStyleDeclaration(selector);
    var defaultStylesObject:Object = {}
    if(cssStyle.defaultFactory != null) {
        cssStyle.defaultFactory.apply(defaultStylesObject)
    }
    for (var defaultProp:String in defaultStylesObject) {
        trace(selector + " defaultFactory " + defaultProp + ":" + defaultStylesObject[defaultProp])
    }
    var stylesObject:Object = {}
    if(cssStyle.factory != null) {
        cssStyle.factory.apply(stylesObject)
    }

    for (var prop:String in stylesObject) {
        trace(selector + " factory " + prop + ":" + stylesObject[prop])
    }
}

如果要查看超类中定义了哪些样式,则必须遍历类层次结构。