Таким образом, в методе прелоадер инициализации вы можете использовать следующую строку, чтобы получить приложение:
parentApplication = event.currentTarget.loaderInfo.content.application;
мы наш прелоадер реализовать пользовательский интерфейс под названием IPreloader и наш App реализовать пользовательский интерфейс под названием IPreloaderApp, IPreloader определяется как:
package com.roundarch.adapt.preloader
{
import mx.preloaders.IPreloaderDisplay;
public interface IPreloader extends IPreloaderDisplay
{
/**
* Setting this will update the preloader's percentage bar or graphic.
*/
function set percentage(value:Number):void;
function get percentage():Number;
/**
* Sets the status (if available) on the preloader.
*/
function set status(value:String):void;
/**
* This will communicate to the preloader that loading of all application
* properties is complete.
*/
function loadingComplete():void;
/**
* This will tell the preloader that there has been an error loading the application.
*
* The preloader will probably want to display this error message in a nice display to
* the user.
*
* @param errorString The error message to display.
* @param fatal If true, the preloader should act as if the application will not run perhaps
* by notifying the user that they cannot continue.
* @return Should return true if the error was properly handled.
*/
function displayError(errorString:String, fatal:Boolean=false):Boolean;
/**
* Returns true if this IPreloader implementation can handle displaying loading
* errors through the error(...) method. If false, the implementing application will
* need to notify the user of any errors itself.
*/
function get canDisplayErrors():Boolean;
}
}
и для IPreloaderApp
package com.roundarch.adapt.preloader
{
/**
* Any application which uses an IPreloader as its preloader will be
* required to implement this interface or throw an error.
*/
public interface IPreloaderApp
{
/**
* Once the application has loaded and initialized, this method will be called on the
* application and the preloader will be passed in so the app can make updates to it.
*/
function preloaderInit(preloader:IPreloader):void;
}
}
Также что-то отметить, если приложение будет добавлено за прелоадер, а не в авансовые (поведение по умолчанию), то вы не увидите предупреждения, которые выскочили приложением так как они будут за прелоадером, поэтому вы захотите переключить заказ. Вот немного кода, который мы использовали, чтобы обойти это:
private var removedOnce : Boolean;
//When the Preloader class instance (this things parent) is removed from it's parent
//add this to the stage, allows us to dispatch the complete event at the corret time
//allowing the SystemManager to add the application to the stage and adding this at
//index 0 to allow pop-ups to show over it.
private function parentRemoved(event : Event) : void
{
if (!removedOnce)
{
removedOnce = true;
stage.addChildAt(this, 0);
ToolTipManager.enabled = false;
}
}
после parentApplication устанавливается внутри обработчика прелоадер инициализации, как показано в верхней части этого поста мы добавим обработчик, чтобы поймать удаление прелоудера ТНЕ SystemManager и повторно добавить его (не видно мерцание)
//Lets the system manager know to add the application to the stage
//this will also remove the preloader for this reason I'm listening for the removal
//then adding the preloader to the stage again
parent.addEventListener(Event.REMOVED, parentRemoved);
dispatchEvent(new Event(Event.COMPLETE));
Еще одна вещи, чтобы отметить, что вы не хотите «загрязнять» код загрузчика с любым Flex классов, если вы включите вещи из в итоге вам придется загружать всю структуру в память до того, как начнется предварительный загрузчик (который может быть здоров).
Пожалуйста, предоставьте код вашего предварительного загрузчика. Ваше описание проблемы недостаточно ясное. –
Независимо от вашей конкретной проблемы, вам, вероятно, следует пересмотреть свою архитектуру: это суть предварительного загрузчика, чтобы сделать что-то до того, как приложение будет готово и исчезнет, когда приложение _is_ будет готово. Оба эти вопроса находятся в противоречии с этой идеей. – RIAstar
Мы делаем это на самом деле. Хотя в некоторых случаях это может показаться противоречивым, в нашем случае мы загружаем основной файл swf, тогда мы выполняем кучу дополнительных запросов при запуске для данных, так как это может занять некоторое время, когда мы продолжаем работу нашего прелоадера (и заставили его отобразить подсказки о приложение, чтобы сохранить его информативным и развлекательным). В основном мы помещаем метод в preloader, и когда приложение завершается, он передает себя через этот метод в preloader, preloader, в свою очередь, проходит через метод обратно к приложению, тем самым создавая мост связи. – shaunhusain