2015-01-31 103 views
0

我正在使用下面的代码来获取包含有关应用程序对象的元数据的对象,但它似乎没有列出样式。是否有像getClassInfo这样的包含样式的方法?

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

有没有方法可以包含样式?并跟进问题是否存在,是否有方法可以指示样式是在本地声明还是在基类中继承/声明?

回答

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]) 
    } 
} 

如果您想查看哪些样式是在超类中定义的,那么您将必须遍历类层次结构。

+0

OK我添加了关键字-keep-as3-metadata + = Style,但是在使用ObjectUtils.getClassInfo()时仍然不显示。我过去做了一个测试,当一个样式没有设置(未定义)时,它没有出现在这两个属性中的任何一个中。我想在我的测试中,如果你创建一个新组件,为它添加一个样式元数据标签,除非它有一个值,否则它实际上并不出现在这两个属性中的任何一个中。我认为SDK中有一些我测试过的基准,baselineShift,top,left,bottom和其他一些不属于这些属性的样式。 – 2015-02-02 23:17:15

相关问题