Loader.loadBytes и getDefinitionByName - PullRequest
       16

Loader.loadBytes и getDefinitionByName

1 голос
/ 06 февраля 2010

В настоящее время я работаю над проектом, который будет загружать 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 не запускает полное событие, поэтому я не знаю, где я слушаю событие, когда байты были полностью загружены в домен приложения.

Должен ли быть более аккуратный способ обойти это?

Спасибо

1 Ответ

4 голосов
/ 06 февраля 2010

Loader.loadBytes запускает завершенное событие. Не забудьте добавить слушателя в Loader.contentLoaderInfo.

Однако, если вы загружаете SWF-файл, который был частью SWC-файла, скомпилированного с FlexSDK до версии 4, вы не получите метод Event.INIT, поскольку он запускается только тогда, когда доступен класс документа. Такой класс внедряется компилятором начиная с SDK версии 4.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...