2012-07-18 44 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