Over 10 years of community discussion and knowledge are maintained here as a read-only archive.
facade.registerProxy(new FlashVarsProxy("FlashVarsProxy", body.root.loaderInfo.parameters)) //body is an instance of Application
var systemConfigProxy = SystemConfigProxy(facade.registerProxy(new SystemConfigProxy()));systemConfigProxy.dataURL = body.root.loaderInfo.parameters.serverURL; //and now wait for notification when the URLLoader is complete
<?xml version="1.0" encoding="utf-8"?><mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" applicationComplete="applicationCompleteHandler(event)"> <mx:Script> <![CDATA[ import mx.events.FlexEvent; import mx.core.Application; private function applicationCompleteHandler(event:FlexEvent):void { var facade:ApplicationFacade = new ApplicationFacade(); facade.startApplication(this); } ]]> </mx:Script></mx:Application>
public class ApplicationFacade extends Facade { public static const START_APPLICATION:String = "startApplication"; override protected function initializeController():void { super.initializeController(); registerCommand(START_APPLICATION, AppStartUpCommand); } public function startApplication(applicationView:Application):void { sendNotification(START_APPLICATION, applicationView); removeCommand(START_APPLICATION); //why not? } }
public class AppStartUpCommand extends SimpleCommand { override public function execute(notification:INotification):void { var app:Application = notification.getBody() as Application; var appMediator:ApplicationMediator = new ApplicationMediator(app); facade.registerMediator(appMediator); facade.registerProxy(new FlashVarsProxy()); facade.registerProxy(new SystemConfigProxy()); //business logic will resume with SystemConfigProxy.NEW_DATA notification } }
public class FlashVarsProxy extends Proxy { public static const NAME:String = "FlashVarsProxy"; public function FlashVarsProxy(proxyName:String=null, data:Object=null) { if (!proxyName) { proxyName = NAME; } if (!data) { data = Application.application.root.loaderInfo.parameters; } super(proxyName, data); } }
public class SystemConfigProxy extends Proxy { public static const NAME:String = "SystemConfigProxy"; public static const NEW_DATA:String = "SystemConfigProxy.newData"; public function SystemConfigProxy(proxyName:String=null, data:Object=null) { if (!proxyName) { proxyName = NAME; } super(proxyName, data); } override public function setData(data:Object):void { super.setData(data); //initial business logic and any concomitant mediators //will respond to this notification appropriately sendNotification(NEW_DATA, data); } override public function onRegister():void { var flashVars:Object = facade.retrieveProxy(FlashVarsProxy.NAME).getData(); var systemId:String = flashVars.systemId; var request:URLRequest = new URLRequest(systemURL + systemId + ".xml"); var loader:URLLoader = new URLLoader(request); loader.addEventListener(Event.COMPLETE, loaderHandler); } private function loaderHandler(event:Event):void { var loader:URLLoader = URLLoader(event.target); loader.removeEventListener(Event.COMPLETE, loaderHandler); setData(loader.data); } }