未在子应用程序中加载的外观(在Flex中)

men*_*nge 4 apache-flex skinning

我们尝试开发具有多个抽象层的Flash游戏引擎.此flex项目包含:

应用程序(1) - >加载类(2) - >加载另一个实现Flex组件(4)的类(3).

加载使用SWFLoader.最后一个Flex组件(4)只是一个具有AdvancedDataGrid的组.我们没有定义皮肤所以我认为它必须采用默认皮肤.

问题是在执行期间会抛出错误,因为在Flex组件中找不到组件的默认外观(4).在我们的例子中,对于AdvancedDataGrid:

Error #1007: Instantiation attempted on a non-constructor.
Run Code Online (Sandbox Code Playgroud)

mx.controls::AdvancedDataGridBaseEx.

guilty命令是:getStyle("headerSeparatorSkin");返回null

目前,我们找到了两个解决方案:

  • 第一个解决方案是将属性添加headerSeparatorSkin="spark.skins.SparkSkin"到Flex组件的AdvancedDataGrid中(4).但这意味着我必须为组件的每个部分手动添加每个皮肤,这是一个非常无聊的解决方案.

  • 第二个解决方案是在第一个Application(1)中创建一个AdvancedDataGrid.我想它将AdvancedDataGrid添加到编译和链接过程中.但是,这个解决方案并不好,因为Application(1)必须知道Flex组件(4)使用了哪些UIComponents.

我们尝试了编译器选项"keep-all-type-selectors = true"(就像这样)但没有改变.

那么,有人有一个解决方案来强制编译器在子应用程序中显式链接Flex组件和他的皮肤吗?

Rid*_*del 6

根据Flexmaniak.pl,它可以通过添加-keep-all-styles-selectors到flex编译器参数来解决.

Flex 4.5.1的正确语法是 -keep-all-type-selectors