Мы пытаемся разработать движок флеш игры с несколькими уровнями абстракции. Этот гибкий проект содержит:
Приложение (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");
, которая возвращает ноль
На данный момент мы нашли два решения:
первое решение - добавить атрибут headerSeparatorSkin="spark.skins.SparkSkin"
в AdvancedDataGrid компонента Flex (4). Но это означает, что я должен вручную добавить каждый скин для каждой части компонента, что является довольно скучным решением.
Второе решение - поместить AdvancedDataGrid в первое Приложение (1). Я полагаю, что он добавляет AdvancedDataGrid в процесс компиляции и компоновки. Однако это решение не подходит, потому что Application (1) должен знать, какие компоненты UIC используются компонентом Flex (4).
Мы попробовали опцию компилятора "keep-all-type-selectors = true" (например, this ), но ничего не изменилось.
Итак, есть ли у кого-нибудь решение, чтобы заставить компилятор явно связать компонент Flex и его обложку в субприложении?