2015-01-31 157 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

相關問題