I had great success with a modular application, in which the main application mainly consists of a module loader, which initially loads the input module.
( , ), ( "LogonEvent" ), , . , - , ( ViewStack ..). LogonEvent .
- , , , , .
-, , .
, . , , , , . , .
, ...
private var mainModuleLogOnEventDispatcher:*;
[Bindable]
private var _logOnDetails:LogOnDetails = new LogOnDetails();
private function onCreationComplete(event:Event):void
{
loadMainModule("LogOnModule.swf");
var mm:IModuleInfo = ModuleManager.getModule("MainModule.swf");
mm.load();
}
[Bindable]
private function set logOnDetails(value:LogOnDetails):void
{
_logOnDetails = value;
}
private function get logOnDetails():LogOnDetails
{
return _logOnDetails;
}
private function loadMainModule(moduleName:String):void
{
if (mainModule.url.length > 0)
{
mainModule.unloadModule();
mainModule.url = "";
}
mainModule.addEventListener(ModuleEvent.READY, handleMainModuleReadyEvent);
mainModule.url = moduleName;
}
private function handleMainModuleReadyEvent(event:ModuleEvent):void
{
mainModule.removeEventListener(ModuleEvent.READY, handleMainModuleReadyEvent);
if (mainModule.url == "LogOnModule.swf")
{
mainModuleLogOnEventDispatcher = mainModule.child;
if (mainModule.child != null) {
mainModuleLogOnEventDispatcher.addEventListener("logOnEvent", handleLogOnEvent);
}
}
if (mainModule.url == "MainModule.swf")
{
var mm:* = mainModule.child;
if (mainModule.child != null)
{
mm.logOnDetails = logOnDetails;
}
}
}
private function handleLogOnEvent(logOnEvent:LogOnEvent):void
{
mainModuleLogOnEventDispatcher.removeEventListener("logOnEvent", handleLogOnEvent);
logOnDetails = logOnEvent.logOnDetails;
var parameters:Object = new Object();
parameters.cmd = "viewPerson";
parameters.token = logOnDetails.logOnToken;
viewPersonRequest.send(parameters);
}
private function handleViewPersonRequestResult(event:ResultEvent):void
{
loadMainModule("MainModule.swf");
currentState = "LoggedOn";
return;
}
private function onLogOff(event:MouseEvent):void
{
var logOnPrefs:SharedObject = SharedObject.getLocal("LogOn", "/");
logOnPrefs.data.loggedOff = true;
var parameters:Object = new Object();
parameters.cmd = "logoff";
parameters.token = logOnDetails.logOnToken;
logoffRequest.send(parameters);
loadMainModule("LogOnModule.swf");
currentState = "";
}
<!-- *** Loads of view state related mxml removed *** -->
<mx:VBox width="100%" height="100%" horizontalAlign="center" verticalAlign="middle" id="mainModuleVBox">
<basic:IJModuleLoader id="mainModule" url="" width="100%" height="100%" horizontalAlign="center" verticalAlign="middle"/>
</mx:VBox>
, - ! , Flex, AIR. , Flex AIR, , , , ( ) , .