Flash Builder 4.5 :: Preloader :: Как получить доступ к объекту preloader из приложения

Работая с Flash Builder 4.5, я реализовал собственный предварительный загрузчик, расширив SparkDownloadProgressBar. Теперь я хочу, чтобы предварительный загрузчик оставался на экране, пока мое приложение не загрузит внешние данные. После загрузки внешних данных приложения я хочу, чтобы предварительный загрузчик отправлял событие Event.COMPLETE.

Намерение состоит в том, чтобы иметь 3-фазный предварительный загрузчик. 1-е загрузит RSL, 2-е SWF, 3-е приложение загрузит данные.

Я переопределил функцию initCompleteHandler, чтобы она не запускала событие Event.COMPLETE после загрузки SWF. У меня есть общедоступная функция в предварительном загрузчике, называемая removePreloader, которая запускает событие Event.COMPLETE.

В приложении есть свойство с именем preloader, но оно равно null.

Как мое приложение может вызвать предварительный загрузчик?

Спасибо, Гэри


person Gary    schedule 26.10.2011    source источник
comment
Я нашел ответ, но StackOverflow не позволяет мне опубликовать его в течение 8 часов. Короче говоря, я установил переменную в приложении для функции предварительного загрузчика. Затем приложение может вызвать эту функцию, когда оно будет готово. Как только StackOverflow позволит мне опубликовать код, я опубликую его.   -  person Gary    schedule 26.10.2011


Ответы (1)


Я не уверен, что это самое элегантное решение AS3, но оно работает. Если у вас есть лучший метод, пожалуйста, напишите.

В приложение mxml я добавил следующую переменную:

public var preloaderFinalFireFunction:Function;

В предварительном загрузчике (который расширяет SparkDownloadProgressBar) я переопределяю initCompleteHandler, чтобы назначить приложению функцию, которая находится внутри предварительного загрузчика. Когда я готов к удалению загрузчика, приложение вызывает preloaderFinalFireFunction();

override protected function initCompleteHandler(event:Event):void{
  var app:MyApplication = MyApplication(FlexGlobals.topLevelApplication);
  app.preloaderFinalFireFunction = removePreloader;
}

protected function removePreloader():void{
  var app:MyApplication = MyApplication(FlexGlobals.topLevelApplication);
  app.preloaderFinalFireFunction = null;
  dispatchEvent(new Event(Event.COMPLETE));
}
person Gary    schedule 04.11.2011