2012-07-18 29 views
1

我在Flex 4.6中構建了一個應用程序,該應用程序在主要的<s:Application>上使用了自定義皮膚。這個皮膚有幾個組件,我想從主應用程序訪問它。Flex 4.6在<s:Application> Skin中獲取對組件的引用

我嘗試使用this.skin.getChildByName("<name of component within skin>"),但它給了我一個運行時錯誤。

如何從主應用程序訪問皮膚內的組件?

回答

2

如果皮膚的組件未作爲skinPart公開,那麼以這種方式訪問​​它違反了封裝規則,並且通常會破壞Flex Skinning Spark模型的優點,該模型將業務邏輯與可視化顯示分開。

這就是說,你可以用這樣的訪問皮膚:

trace(skinAsSparkSkin.myVaribleInsideSkin); 

// for a SparkSkin 
var skinAsSparkSkin : SparkSkin = this.skin as SparkSkin; 
// for a MobileSkin 
var skinAsMobileSkin : MobileSkin = this.skin as MobileSkin; 
// for your custom skin type 
var skinAsCustomSkin : MyCustomSkin = this.skin as MyCustomSkin; 

一旦你進入皮膚,你可以用這樣的訪問皮膚內公共變量

對於在MXML皮膚中創建的組件,它們不是皮膚部件,它們將是公共變量,您可以通過您在MXML代碼中定義的ID訪問它們:

在皮膚:

<s:List id="myList"/> 

在組件類:

trace(skinAsSparkSkin.myList); 
+0

啊...類型轉換爲的伎倆!太棒了!謝謝。 – 2012-07-18 21:33:14