apache-flex 未在子应用程序中加载外观(在Flex中)

kkbh8khc  于 2022-11-01  发布在  Apache
关注(0)|答案(2)|浏览(166)

我们尝试开发一个具有多个抽象层的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组件和皮肤?

c2e8gylq

c2e8gylq1#

根据Flexmaniak.pl,它可以通过将-keep-all-styles-selectors添加到flex编译器参数来解决。
Flex 4.5.1的正确语法是-keep-all-type-selectors

wgeznvg7

wgeznvg72#

我在将所有Flex库作为运行时共享库(RSL)时遇到了这个问题。我将编译器选项中的框架链接更改为“合并到代码中”,getStyle(“headerSeparatorSkin”)不再返回空值。不确定这对您是否可行,但至少它会给予您一个提示。

相关问题