Слушайте события из preloader в flex - PullRequest
1 голос
/ 25 марта 2009

В моем приложении Flex есть предзагрузчик:

public class Preloader extends DownloadProgressBar 
{

    private var _preloader:PreloaderAnimation;

    public function Preloader()
    {
        super();

        _preloader = new PreloaderAnimation;
        addChild(_preloader);
    }

    public override function set preloader(preloader:Sprite):void 
    {                   
        preloader.addEventListener(ProgressEvent.PROGRESS  , onSWFDownloadProgress );
        preloader.addEventListener(Event.COMPLETE          , onSWFDownloadComplete );
        preloader.addEventListener(FlexEvent.INIT_PROGRESS , onFlexInitProgress    );
        preloader.addEventListener(FlexEvent.INIT_COMPLETE , onFlexInitComplete    );
    }

    .........

    private function onFlexInitComplete( event:FlexEvent ):void 
    {
        dispatchEvent(new Event(Event.COMPLETE));
    }
}

Когда инициализация Flex завершена, предзагрузчик отправляет Event.COMPLETE. Но я хочу иметь возможность слушать событие в моем гибком приложении и делать вещи, когда оно отправляется. Когда он отправляет, preloader удаляет себя, поэтому это важно. Любая идея о том, как я могу слушать из моего гибкого приложения?

С уважением Adlertz

Ответы [ 6 ]

1 голос
/ 27 марта 2009

Событие PreITader INIT_COMPLETE наступает после того, как preloader получает событие CREATION_COMPLETE приложения.

Порядок инициализации таков:

  • Preloader начинает загрузку вашего приложения;
  • Приложение загружено, начинается инициализация;
  • Приложение инициализировано, отправляет CREATION_COMPLETE;
  • Preloader получает Application.CREATION_COMPLETE, отправляет INIT_COMPLETE;
  • Ваш класс preloader получает INIT_COMPLETE для Preloader;
  • Ваш preloader отправляет событие COMPLETE;
  • Preloader удаляет ваш класс preloader и отправляет (приватное) событие PRELOADER_DONE;
  • Ваше приложение отображается.

В данном случае это означает, что Application.CREATION_COMPLETE эквивалентен Preloader.INIT_COMPLETE - если вы хотите знать, когда предварительный загрузчик отправляет INIT_COMPLETE, то прослушивать CREATION_COMPLETE.

Вы можете подтвердить все это, просмотрев исходный код класса Preloader.

0 голосов
/ 13 сентября 2011

В вашем приложении Flex необходимо прослушивать событие Application.applicationComplete.

Если в вашем классе Preloader у вас есть функция, похожая на

private function onFlexInitComplete( event:FlexEvent ):void 
{
    dispatchEvent(new Event(Event.COMPLETE));
}

вы хотите убедиться, что заголовок вашего файла приложения выглядит как

<s:Application 
    preloader = "MyPreloader"
    applicationComplete="onApplicationComplete();" >

При такой настройке onApplicationComplete () будет запускаться всякий раз, когда вы решите отправить событие Event.COMPLETE из вашего предзагрузчика.

0 голосов
/ 22 октября 2009

Кажется, что событие приложения APPLICATION_COMPLETE генерируется сразу после того, как Preloader запускает событие Event.COMPLETE ... просто прослушать это?

0 голосов
/ 22 апреля 2009

Flex.INIT_COMPLETE запускается, когда приложение флэш-памяти завершило инициализацию. поэтому он отправляется точно после события инициализации основного приложения.

0 голосов
/ 26 марта 2009

Причина, по которой мне нужно знать, когда завершен предварительный загрузчик, заключается в том, что я хочу воспроизвести фильм сразу после того, как первый кадр в фильме выглядит как изображение предварительного загрузчика.

Предварительный загрузчик отображается до тех пор, пока вы не отправите событие Event.COMPLETE из вашего предварительного загрузчика.

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

(Если вам интересно, посмотрите исходный код Flex Preloader в функции 'displayClassCompleteHandler')

0 голосов
/ 25 марта 2009

Я не уверен, что именно вы пытаетесь достичь. Если вы просто хотите что-то сделать во время инициализации приложения или завершения создания, вы можете использовать события creationComplete или intialize для приложения. Есть ли причина, по которой вам нужно знать, как только завершится предварительный загрузчик (если предположить, что он будет отличаться от события creationComplete из приложения, я не думаю, что это будет)?

Обновление:

так вы просто хотите иметь возможность прослушать событие Complete с правильного прелоадера?

Попробуйте: создайте обработчик событий инициализации в приложении и попытайтесь подключить прослушиватель событий к предварительному загрузчику. это будет выглядеть примерно так (это не проверено, поэтому может иметь опечатки и т. д.)

public function applicationInitalize_handler ( e:FlexEvent ) : void
{
Application.preloader.addEventListener(Event.COMPLETE,myEventHandler);
}

посмотрим, может ли это сработать.

...