В настоящее время я работаю над проектом, который будет загружать SWC, проверять его и разрешать пользователю просматривать классы внутри.
Я загружаю library.swf, используя Loader.loadBytes (байты взяты из библиотеки unzip, которую я использую). Я создаю экземпляр класса, используя getDefinitionByName.
Это все работает нормально, пока getDefinitionByName вызывается в следующем кадре. Если я позвоню сразу, я получу ошибку ссылки. Чтобы обойти это, я нашел довольно хакерское решение:
private function processLibraries( event : Event ) : void
{
_zipFiles.forEach( processSwfs );
DisplayObject( FlexGlobals.topLevelApplication ).addEventListener( Event.ENTER_FRAME, enterFrame );
}
private function enterFrame( event : Event ) : void
{
DisplayObject( FlexGlobals.topLevelApplication ).removeEventListener( Event.ENTER_FRAME, enterFrame );
_classCollection = new ArrayCollection();
_zipFiles.forEach( processCatalogs );
complete( _classCollection );
}
Мне действительно не нравится использовать событие ввода фрейма в приложении верхнего уровня. Я также не хочу устанавливать таймер. Это так же противно.
Loader.loadBytes не запускает полное событие, поэтому я не знаю, где я слушаю событие, когда байты были полностью загружены в домен приложения.
Должен ли быть более аккуратный способ обойти это?
Спасибо