我们尝试开发一个具有多个抽象层的Flash游戏引擎。此Flex项目包含:
应用程序(1)-〉加载类(2)-〉加载另一个示例化Flex组件的类(3)(4)。
加载使用SWFLoader。最后一个Flex组件(4)只是一个带有AdvancedDataGrid的组。我们没有定义皮肤,所以我想它必须使用默认皮肤。
问题在于,在执行过程中,会抛出一个错误,因为在Flex组件(4)中找不到组件的默认皮肤。
Error #1007: Instantiation attempted on a non-constructor.
单位为mx.controls::AdvancedDataGridBaseEx
。
有罪的命令是:getStyle("headerSeparatorSkin");
,返回空值
目前,我们找到了两个解决方案:
- 第一个解决方案是将属性
headerSeparatorSkin="spark.skins.SparkSkin"
添加到Flex组件(4)的AdvancedDataGrid中,但这意味着我必须手动为组件的每个部分添加每个皮肤,这是一个非常无聊的解决方案。 - 第二个解决方案是在第一个应用程序(1)中创建一个AdvancedDataGrid。2我假设它将AdvancedDataGrid添加到编译和链接过程中。3但是,这个解决方案并不好,因为应用程序(1)必须知道Flex组件(4)使用了哪些UIComponents。
我们尝试了编译器选项“keep-all-type-selectors=true”(类似于this),但没有任何变化。
那么,是否有解决方案可以强制编译器在子应用程序中显式链接Flex组件和皮肤?
2条答案
按热度按时间c2e8gylq1#
根据Flexmaniak.pl,它可以通过将
-keep-all-styles-selectors
添加到flex编译器参数来解决。Flex 4.5.1的正确语法是
-keep-all-type-selectors
wgeznvg72#
我在将所有Flex库作为运行时共享库(RSL)时遇到了这个问题。我将编译器选项中的框架链接更改为“合并到代码中”,getStyle(“headerSeparatorSkin”)不再返回空值。不确定这对您是否可行,但至少它会给予您一个提示。