2012-02-11 99 views
0

我有一個SWF加載程序的應用程序。
從加載的SWF文件,我訪問從主應用程序公共變量與此:如何在Flex的主應用程序中使用皮膚?

[Bindable] public var global:Object = FlexGlobals.topLevelApplication; 

Alert.show(global.myvar); 

這一切都運行完美。


我在主應用程序的一個名爲'skins'的目錄中有一個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" /> 

是否有可能我想以另一種方式獲得什麼,或者我是否必須將皮膚複製到我想要使用皮膚的所有項目中?

謝謝。

+1

一個選項可以是製作一個具有所有皮膚類的swc,並將該swc標記爲rsl。這樣你就有skin.swc,main_app.swf和child_app.swf。由於swc是rsl,它不會增加任何swf的權重,編譯器也會很高興。否則,您可以通過getDefinitionByName從mainApp獲取皮膚的類實例,並使用該類創建皮膚實例。當然,在這種情況下你不會有任何編譯時間檢查。 – catholicon 2012-02-11 20:35:27

回答

0

我已經解決了這個問題。

在我的主SWF文件,我定義一個公共變量類:

public var menuButtons:Class = skins.menuButtons; 

而且在孩子的SWF文件,我指的是這個變量與FlexGlobals.topLevelApplication:

[Bindable] public var global:Object = FlexGlobals.topLevelApplication; 

<s:Button label="My Text" skinClass="{global.menuButtons}" /> 

顯然這是不可能的,直接與皮膚global.skins.menuButtons