2010-07-29 83 views
4

我們嘗試開發具有多個抽象層的Flash遊戲引擎。此flex項目包含:未加載子應用程序中的皮膚(在Flex中)

應用程序(1) - >加載類(2) - >加載實例化Flex組件(4)的另一個類(3)。

加載使用SWFLoader。最後一個Flex組件(4)只是具有AdvancedDataGrid的組。我們不定義皮膚,所以我想它必須採用默認皮膚。

問題是,在執行期間,錯誤被拋出,因爲在Flex組件(4)中找不到組件的默認外觀。在我們的例子中,對於AdvancedDataGrid:

Error #1007: Instantiation attempted on a non-constructor. 

in mx.controls::AdvancedDataGridBaseEx

有罪的命令是:getStyle("headerSeparatorSkin");它返回null

就目前而言,我們發現了兩個解決方案:

  • 第一個解決方案是將屬性headerSeparatorSkin="spark.skins.SparkSkin"添加到Flex組件在AdvancedDataGrid( 4)。但這意味着我必須手動添加每個部件的每個部件,這是一個非常無聊的解決方案。

  • 第二種解決方案是將一個AdvancedDataGrid創建成第一個Application(1)。我想它會將AdvancedDataGrid添加到編譯和鏈接過程中。但是,這種解決方案並不好,因爲應用程序(1)必須知道Flex組件(4)使用哪些UIComponent。

我們嘗試了編譯器選項「保持所有類型選擇=真」(如this),但什麼都沒有改變。

因此,有人有一個解決方案,迫使編譯器顯式鏈接Flex組件和他的皮膚在子應用程序中?

+0

您是否曾經解決過這個問題?我有這個問題! :( – 2011-03-24 16:40:15

回答

1

當我的所有Flex庫都包含運行時共享庫​​(RSL)時,我遇到過這個問題。我將我的編譯器選項中的框架鏈接更改爲「合併到代碼中」,getStyle(「headerSeparatorSkin」)不再返回null。不知道這是否是一個可行的選擇,但至少它會給你一個提示。

6

根據Flexmaniak.pl,可以通過將-keep-all-styles-selectors添加到flex編譯器參數來解決該問題。

Flex 4.5.1的正確語法是-keep-all-type-selectors