我們嘗試開發具有多個抽象層的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組件和他的皮膚在子應用程序中?
您是否曾經解決過這個問題?我有這個問題! :( – 2011-03-24 16:40:15