PureMvc单核版示例


  package { import controller.LoginCommand; import controller.StartUpCommand; import org.puremvc.as3.interfaces.IFacade; import org.puremvc.as3.patterns.facade.Facade; import spark.components.Application; /** * * @author jixin_huang */ public class ApplicationFacade extends Facade implements IFacade { //常量 /** * * @default */ public static const STARTUP:String="startup"; /** * * @default */ public static const LOGIN:String="login"; /** * * @default */ public static const LOGIN_SUCCESS:String="login_success"; /** * * @default */ public static const LOGIN_FAIL:String="login_fail"; //public 变量 //pirvate 变量 private var instance:ApplicationFacade; //构造函数 /** * */ public function ApplicationFacade() { //TODO: implement function super(); } /** * 获得ApplicationFacade单例 * @return */ public static function getInstance():ApplicationFacade { if (!instance) { instance=new ApplicationFacade(); } return instance as ApplicationFacade; } /** * * @param app */ public function startUp(app:Application):void { sendNotification(STARTUP, app); } //覆盖函数 override protected function initializeController():void { super.initializeController(); //注册command registerCommand(STARTUP,StartUpCommand);//启动命令 registerCommand(LOGIN,LoginCommand);//登录命令; } } }  flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" xmlns:components="view.components.*" creationComplete="application_creationCompleteHand ler(event)">          package controller { import model.UserProxy; import model.vo.User; import org.puremvc.as3.interfaces.INotification; import org.puremvc.as3.patterns.command.SimpleCommand; /** * * @author jixin_huang */ public class LoginCommand extends SimpleCommand { private var userProxy:UserProxy; /** * */ public function LoginCommand() { //TODO: implement function super(); userProxy=facade.retrieveProxy(UserProxy.NAME) as UserProxy; } override public function execute(notification:INotification):void { var user:User=notification.getBody() as User; userProxy.login(user.username,user.password); } } } package controller { import model.UserProxy; import org.puremvc.as3.interfaces.ICommand; import org.puremvc.as3.interfaces.INotification; import org.puremvc.as3.patterns.command.SimpleCommand; /** * * @author jixin_huang */ public class PreModelCommand extends SimpleCommand implements ICommand { /** * */ public function PreModelCommand() { super(); } override public function execute(notification:INotification):void { facade.registerProxy(new UserProxy(UserProxy.NAME)); } } } package controller { import org.puremvc.as3.interfaces.INotification; import org.puremvc.as3.patterns.command.SimpleCommand; import view.components.LoginFormMediator; /** * * @author jixin_huang */ public class PreViewCommand extends SimpleCommand { /** * */ public function PreViewCommand() { super(); } override public function execute(notification:INotification):void { var app:PuremvcSingleCoreDemo=notification.getBody() as PuremvcSingleCoreDemo; facade.registerMediator(new LoginFormMediator(app.loginForm)); } } } package controller { import model.UserProxy; import org.puremvc.as3.interfaces.INotification; import org.puremvc.as3.patterns.command.MacroCommand; import org.puremvc.as3.patterns.command.SimpleCommand; import spark.components.Application; import view.components.LoginFormMediator; /** * * @author jixin_huang */ public class StartUpCommand extends MacroCommand { /** * */ public function StartUpCommand() { //TODO: implement function super(); } override protected function initializeMacroCommand():void { addSubCommand(PreModelCommand); addSubCommand(PreViewCommand); } } } package model.vo { [Bindable] /** * * @author jixin_huang */ public class User { private var _username:String; private var _password:String; /** * */ public function User() { } /** * * @return */ public function get password():String { return _password; } /** * * @param value */ public function set password(value:String):void { _password = value; } /** * * @return */ public function get username():String { return _username; } /** * * @param value */ public function set username(value:String):void { _username = value; } } } package model { import mx.rpc.IResponder; import mx.rpc.remoting.RemoteObject; /** * * @author jixin_huang */ public class UserBusiness { private var _iResponder:IResponder; private var service:RemoteObject; /** * * @param iResponder */ public function UserBusiness(iResponder:IResponder) { _iResponder=iResponder; service=new RemoteObject(); service.destination=""; service.showBusyCursor=true; } /** * * @param username * @param password */ public function login(username:String, password:String):void { var object:Object=service.login(username,password); object.addResponder(_iResponder); } } } package model { import mx.rpc.IResponder; import mx.rpc.Responder; import mx.rpc.events.FaultEvent; import mx.rpc.events.ResultEvent; import org.puremvc.as3.interfaces.IProxy; import org.puremvc.as3.patterns.proxy.Proxy; import spark.components.Application; /** * * @author jixin_huang */ public class UserProxy extends Proxy implements IProxy { /** * * @default */ public static const NAME:String="UserProxy"; private var userProxy:UserProxy; /** * * @param data */ public function UserProxy(data:Object=null) { //TODO: implement function super(NAME, data); } /** * * @param username * @param password * @return */ public function login(username:String, password:String):Boolean { /*var userBusiness:UserBusiness=new UserBusiness(new Responder(loginResult,loginFault)); userBusiness.login(username,password);*/ if ("admin" == username && "123456" == password) { loginResult(); return true; } else { loginFault(); return false; } } private function loginResult(event:ResultEvent=null):void { sendNotification(ApplicationFacade.LOGIN_SUCCESS,t rue); } private function loginFault(event:FaultEvent=null):void { sendNotification(ApplicationFacade.LOGIN_FAIL,fals e); } } } // ActionScript file /** * * @param username * @param password * @return */ protected function enbleLogin(username:String, password:String):Boolean { return username != "" && password != ""; }  flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" defaultButton="{loginBtn}" creationComplete="form1_creationCompleteHandler(ev ent)">                        package view.components { import flash.events.MouseEvent; import model.vo.User; import mx.controls.Alert; import org.puremvc.as3.interfaces.IMediator; import org.puremvc.as3.interfaces.INotification; import org.puremvc.as3.patterns.mediator.Mediator; /** * * @author jixin_huang */ public class LoginFormMediator extends Mediator implements IMediator { /** * * @default */ public static const NAME:String="LoginFormMediator"; /** * * @param viewComponent */ public function LoginFormMediator(viewComponent:Object=null) { //TODO: implement function super(NAME, viewComponent); } /** * * @return */ public function get formView():LoginForm { return viewComponent as LoginForm; } private function loginBtnClickHandler(event:MouseEvent):void { var user:User=new User(); user.username=formView.usernameInput.text; user.password=formView.passwordInput.text; sendNotification(ApplicationFacade.LOGIN, user); } override public function listNotificationInterests():Array { var array:Array=[ApplicationFacade.LOGIN_SUCCESS, ApplicationFacade.LOGIN_FAIL]; return array; } override public function handleNotification(notification:INotification):voi d { switch (notification.getName()) { case ApplicationFacade.LOGIN_SUCCESS: formView.tipLabel.text="恭喜你登录成功了"; break; case ApplicationFacade.LOGIN_FAIL: formView.tipLabel.text="登录失败"; break; default: super.handleNotification(notification); break; } } override public function onRegister():void { super.onRegister(); formView.loginBtn.addEventListener(MouseEvent.CLIC K, loginBtnClickHandler); } } } 

猜你喜欢

转载自fjtml69n.iteye.com/blog/1573108