Создайте экземпляры гибкого пользовательского компонента, передав тип

В моем гибком приложении есть несколько настраиваемых компонентов. Я хочу создать экземпляр этих компонентов во время выполнения и назначить им свойства, прочитав файл конфигурации. Я знаю, как читать xml и создавать экземпляры компонентов, однако мой вопрос заключается в том, чтобы получить тип компонента из атрибута xml, а затем создать экземпляр этого типа. Мой xml выглядит так:


person CodeQrius    schedule 28.07.2009    source источник
comment
Вы хотели вернуться и опубликовать XML?   -  person ryanday    schedule 29.07.2009
comment
использование xml для настройки ваших компонентов, вероятно, является плохой идеей и пережитком какого-то другого языка, к которому вы привыкли. Попробуйте сделать то же самое по-другому.   -  person Sean Clark Hess    schedule 29.07.2009
comment
У меня был файл xml. Как-то пропало из моего поста.   -  person CodeQrius    schedule 30.07.2009


Ответы (1)


Вы можете создать экземпляр произвольного именованного типа с помощью «API отражения» ActionScript:

var clazz:Class = Class(getDefinitionByName("class.from.your.xml.file.Name"));
var component:Object = new clazz();

http://livedocs.adobe.com/flex/3/langref/flash/utils/package.html#getDefinitionByName().

Если вы получаете ошибку о том, что тип не существует, это связано с тем, что он не связан откуда-либо еще в вашем приложении, и компилятор только добавляет классы, на которые есть ссылки. Вы можете обойти это, используя следующий аргумент компилятора:

includes class [...]

Связывает один или несколько классов с результирующим SWF-файлом приложения независимо от того, требуются ли эти классы во время компиляции.

http://livedocs.adobe.com/flex/3/html/compilers_14.html#157203

person cliff.meyers    schedule 29.07.2009
comment
В итоге я использовал приведенный выше код в сочетании с передачей класса в экземпляр ClassFactory. - person CodeQrius; 30.07.2009