我们尝试开发具有多个抽象层的 Flash 游戏引擎。这个弹性项目包含:
一个应用程序 (1)-> 加载一个类 (2)-> 加载另一个类 (3),它实例化了一个 Flex 组件 (4)。
加载使用 SWFLoader。最后一个 Flex 组件 (4) 只是一个带有 AdvancedDataGrid 的组。我们没有定义皮肤,所以我想它必须采用默认皮肤。
问题是在执行过程中,由于在 Flex 组件中找不到组件的默认皮肤(4)而引发错误。在我们的例子中,对于 AdvancedDataGrid:
Error #1007: Instantiation attempted on a non-constructor.
在mx.controls::AdvancedDataGridBaseEx
.
有罪的命令是:getStyle("headerSeparatorSkin");
它返回 null
目前,我们找到了两种解决方案:
第一个解决方案是将属性添加
headerSeparatorSkin="spark.skins.SparkSkin"
到 Flex 组件的 AdvancedDataGrid 中 (4)。但这意味着我必须为组件的每个部分手动添加每个皮肤,这是一个非常无聊的解决方案。第二种解决方案是在第一个应用程序 (1) 中创建一个 AdvancedDataGrid。我想它将 AdvancedDataGrid 添加到编译和链接过程中。然而,这个解决方案并不好,因为应用程序 (1) 必须知道 Flex 组件 (4) 使用了哪些 UIComponent。
我们尝试了编译器选项“keep-all-type-selectors=true”(像这样),但没有任何改变。
那么,是否有人可以强制编译器在子应用程序中显式链接 Flex 组件和他的皮肤?