【发布时间】:2012-03-03 20:01:46
【问题描述】:
我有一个带有 SWF 加载器的应用程序。
从加载的 SWF 文件中,我使用以下命令从主应用程序访问公共变量:
[Bindable] public var global:Object = FlexGlobals.topLevelApplication;
Alert.show(global.myvar);
这一切都很完美。
我在主应用程序的“皮肤”目录中有一个 MXML 皮肤文件(用于按钮)。
是否可以在子应用程序中使用此皮肤?
我已经试过了,很遗憾没用:
[Bindable] public var global:Object = FlexGlobals.topLevelApplication;
<s:Button label="My Text" skinClass="{global.skins.menuButtons}" />
还有这个,但是它不能再编译了:
[Bindable] public var global:Object = FlexGlobals.topLevelApplication;
<s:Button label="Button 1" skinClass="global.skins.menuButtons" />
<s:Button label="Button 2" skinClass="FlexGlobals.topLevelApplication.skins.menuButtons" />
是否有可能以另一种方式实现我想要的,或者我必须将皮肤复制到我想使用皮肤的所有项目中?
谢谢。
【问题讨论】:
-
一个选项可以是制作一个包含所有皮肤类的 swc,并将该 swc 标记为 rsl。这样你就有了 skin.swc、main_app.swf 和 child_app.swf。由于 swc 是 rsl,它不会增加任何 swf 的重量,编译器也会很高兴。否则,您可以通过 getDefinitionByName 从 mainApp 获取皮肤的类实例,并使用该类创建皮肤实例。当然,在这种情况下你不会有任何编译时检查。
标签: actionscript-3 apache-flex flex4 flash-builder flex4.5