三、登陆功能的实现
3.1 用户实体类User
定义用户名和密码。一般要加[Bindable]标签,标记为可绑定。
package vo { import com.adobe.cairngorm.vo.IValueObject; [Bindable] public class User implements IValueObject { public var userName:String = ""; public var password:String = ""; public function User() { } } }
3.2 remoteObject服务
基于cairngorm框架里的ServiceLocator标签,它是使用单例模式,在整个项目中只有一个实例,当在此标签内部定义RemoteObject等于后台通信服务的标签时,便会被存储起来再使用时,通过getRemoteObject方法获取。
<?xml version="1.0" encoding="utf-8"?> <cairngorm:ServiceLocator xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:cairngorm="com.adobe.cairngorm.business.*"> <mx:RemoteObject id="generalRemoteObject" destination="fluorine" endpoint="http://192.1.1.113/liWebService/Gateway.aspx" source="Li.FluorineFx.Sample" showBusyCursor="true"/> </cairngorm:ServiceLocator>
3.3 后台代理类GeneralDelegate
首先获取到定义好的RemoteObject对象的引用,然后进行后台方法的调用。使用AsyncToken的addResponder来进行返回结果的处理。
/** * 常用的代理 */ package business { import com.adobe.cairngorm.business.ServiceLocator; import mx.rpc.AsyncToken; import mx.rpc.IResponder; import vo.User; public class GeneralDelegate { /** 应答器 */ private var responder:IResponder; private var service:Object; public function GeneralDelegate( responder:IResponder ) { this.responder = responder; this.service = ServiceLocator.getInstance().getRemoteObject("generalRemoteObject"); } /** * 登录 */ public function logon( user:User ):void { var call:AsyncToken = service.Logon(user.userName, user.password); call.addResponder(responder); } } }
3.4 Model类
使用单例模式,保存全局数据。
package models { import com.adobe.cairngorm.model.IModelLocator; [Bindable] public class GeneralModel implements IModelLocator { public var logonResult:String = ""; /** 单一引用对象 */ private static var generalModel:GeneralModel = null; [Deprecated(replacement="GeneralModel.getInstance()")] public function GeneralModel() { } public static function getInstance():GeneralModel { if( generalModel == null ) { generalModel = new GeneralModel(); } return generalModel; } } }
3.5 登录事件类LogonEvent
自定义事件,继承CairngormEvent,一般定义一些变量用来存储数据。
/** * 登陆操作事件 */ package control.event { import com.adobe.cairngorm.control.CairngormEvent; import vo.User; public class LogonEvent extends CairngormEvent { /** 操作登陆的用户 */ public var user:User; public static const LOGON:String = "logon"; public function LogonEvent(type:String, user:User) { this.user = user; super(type); } } }
3.6 事件注册类GeneralControl
用于对事件注册监听器。
package control { import com.adobe.cairngorm.control.FrontController; import control.event.*; import commands.*; public class GeneralControl extends FrontController { public function GeneralControl() { super.addCommand(LogonEvent.LOGON, LogonCommand );//注册,用户登陆命令 } } }
3.7 对应Command类
事件触发后的处理方法,和调用后台后返回结果的处理,例如更新model中的数据。
/** * 用户登陆,操作命令 */ package commands { import com.adobe.cairngorm.commands.ICommand; import com.adobe.cairngorm.control.CairngormEvent; import mx.rpc.IResponder; import mx.rpc.events.FaultEvent; import mx.rpc.events.ResultEvent; import business.GeneralDelegate; import errors.ManageErrors; import models.GeneralModel; import control.event.LogonEvent; import vo.User; public class LogonCommand implements ICommand, IResponder { public function LogonCommand() { } /**------------------------------- Command接口方法 ----------------------------------------------*/ /** * 用户登陆,事件处理方法 */ public function execute( event:CairngormEvent ):void { var generalDelegate:GeneralDelegate = new GeneralDelegate( this ); generalDelegate.logon( (event as LogonEvent).user ); } /**------------------------------- IResponder接口方法 ---------------------------------------------*/ public function result( info:Object ):void { var result:Boolean = (info as ResultEvent).result as Boolean; if( result ) { GeneralModel.getInstance().logonResult = "登陆成功"; } else { GeneralModel.getInstance().logonResult = "登陆失败"; } } public function fault( info:Object ):void { ManageErrors.manageFaults( info as FaultEvent ); } } }
3.8 界面Application
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" minWidth="1003" minHeight="600" fontSize="12" xmlns:control="control.*" xmlns:services="services.*"> <mx:Script> <![CDATA[ import control.event.LogonEvent; import models.GeneralModel; import vo.User; /** * 登陆按钮,事件处理 */ private function buttonLogon_clickHandler(event:MouseEvent):void { var user:User = new User(); user.userName = this.textInputUserName.text; user.password = this.textInputPassword.text; var logonEvent:LogonEvent = new LogonEvent(LogonEvent.LOGON, user); logonEvent.dispatch(); } ]]> </mx:Script> <control:GeneralControl /> <services:GeneralServices /> <mx:Binding source="GeneralModel.getInstance().logonResult" destination="textArea.text"/> <mx:VBox width="400" horizontalCenter="0" verticalCenter="90" horizontalAlign="center"> <mx:HBox verticalAlign="middle" borderStyle="solid"> <mx:Form > <mx:FormItem label="用户名:"> <mx:TextInput id="textInputUserName" width="150" /> </mx:FormItem> <mx:FormItem label="密码:"> <mx:TextInput id="textInputPassword" width="150" displayAsPassword="true" /> </mx:FormItem> </mx:Form> <mx:Button label="登陆" click="buttonLogon_clickHandler(event)" /> </mx:HBox> <mx:TextArea id="textArea" text="未登录" /> </mx:VBox> </mx:Application>
相关推荐
Cairngorm例子Cairngorm例子Cairngorm例子Cairngorm例子
什么是Cairngorm,内部MVC结构,Cairngorm的各个部分
flex框架之Cairngorm框架,一个用Cairngorm与后台通信实例
Cairngorm is the lightweight micro-architecture for Rich Internet Applications built in Flex or AIR. A collaboration of recognized design patterns, Cairngorm exemplifies and encourages best-practices ...
cairngorm.swc供需要的朋友急用
Flex框架Cairngorm经典案例源码 完全掌握Cairngorm
Cairngorm框架配置是flex的前端一个框架
cairngorm框架是flex界的mvc框架,传统的flex开发方法开发的代码难以维护。 这个是cairngorm的中文版入门讲解
绝对是Cairngorm框架入门的好Demo.下载后记得评分!
Flex流行MVC框架之Cairngorm
flex与java交互 blaze+cairngorm框架实现用户登录
cairngorm与lcds结合应用的最小工程包,适合研究cairngorm 与lcds的用户
flex框架之Cairngorm框架,包括Cairngorm框架
Flex开发框架cairngorm入门实例教程,有需要的人可以看一下
一个 Flex+J2EE实例(cairngorm+blazeDS+hibernate+spring) 本实例为一个 flex 与 java通信项目。前端采用cairngorm框架,后台 采用hibernate+spring 每个部署 步骤,附详细 图文解释。旨在 采用 一种快速开发 ...
功能点: ①flex提交表单保存到数据库; ②flex向后台请求,后台返回List集合,flex将集合填充到combox 附带:数据库sql在java工程中,测试通过,完整的flex使用框架Cairngorm向java后台数据交互
Cairngorm 源码 Cairngorm 源码 Cairngorm 源码
Cairngorm開發架構 Cairngorm前生是Itereation:Tow公司的一個開源項目,是FLEX開發的實踐框架。在Cairngorm基礎上開發RIA,將會提高FLEX的程序的條理性、維護性和擴展性。當adobe公司推出Flex2和Action Script3的時...