Как предварительно загрузить файл во Flex до инициализации приложения - PullRequest
2 голосов
/ 05 мая 2010

Проблема: Файл конфигурации XML необходимо загрузить в время выполнения и быть готовым при вызове метода createChildren () приложения. Самое позднее, потому что значения конфигурации необходимы для правильной инициализации дочерних компонентов. Желательно, чтобы загрузка конфигурации была завершена еще до создания приложения. Короче я хочу сделать это:

  1. загрузить конфигурацию, затем
  2. инициализировать приложение, используя загруженную конфигурацию.

Я создал собственный прелоадер, чтобы помочь решить эту проблему. Но, как выясняется, метод createChildren () приложения уже вызывается во время предварительной загрузки, когда загрузка конфигурации еще не гарантирована. То есть до того, как пользовательский предварительный загрузчик отправит событие COMPLETE.

Спасибо за любую помощь заранее.

Ответы [ 2 ]

3 голосов
/ 07 мая 2010

Я нашел решение проблемы. Ключ был в том, чтобы перехватить событие preloader FlexEvent.INIT_PROGRESS, поставить его в очередь и остановить его распространение до полной загрузки конфигурации. Это эффективно останавливает платформу для продолжения инициализации приложения. После загрузки конфигурации перераспределите события в очереди, позволяя платформе завершить фазу предварительной загрузки. Пример кода ниже (только соответствующие части):

public class PreloaderDisplay extends Sprite implements IPreloaderDisplay {
    // mx.preloaders.IPreloaderDisplay interface
    public function set preloader(preloader:Sprite):void {
        // max priority to ensure we catch this event first
        preloader.addEventListener(FlexEvent.INIT_PROGRESS, onInitProgress, false, int.MAX_VALUE);
        startLoadingConfiguration();
    }
    private function onInitProgress(e:FlexEvent):void {
        if (isConfigurationLoading) {
            queuePreloaderEvent(e);
            e.stopImmediatePropagation();
        }
    }
    private function onConfigurationLoaded():void {
        dispatchQueuedPreloaderEvents();
    }
}

Чтобы использовать его в приложении:

<mx:Application preloader="the.package.of.PreloaderDisplay">
1 голос
/ 05 мая 2010

Самый простой способ (я думаю) - создать холст «держатель», который будет создавать контент приложений после загрузки файла контекста, т.е.

(код псевдо)

Application.mxml:

<mx:Canvas>
   <mx:Script>
      public function init():void{
          loadXML();
      }

      public function handleXMLLoaded():void{
          this.addChild(myApplicationContent);
      }
   </mx:Script>
</mx:Canvas>

MyApplicationContent.mxml

<mx:Canvas>
<!-- contains all your components etc -->
</mx:Canvas>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...