`
ch_kexin
  • 浏览: 897413 次
  • 性别: Icon_minigender_2
  • 来自: 青岛
社区版块
存档分类
最新评论

PureMVC的简单登录实例

阅读更多
Src目录下:
LoginForm.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml" fontSize="12" layout="vertical" horizontalAlign="center" title="用户登录" width="314">
	<mx:Script>
		<![CDATA[
			import system.NameSpace;
		]]>
	</mx:Script>
	<mx:Form width="100%" height="100%">
		<mx:FormHeading label="敬请登录"/>
		<mx:FormItem label="登录名称">
			<mx:TextInput id="loginName"/>
		</mx:FormItem>
		<mx:FormItem label="登录密码">
			<mx:TextInput id="loginPassword"/>
		</mx:FormItem>
		<mx:FormItem>
			<mx:Button label="确定" id="loginBtn" click="dispatchEvent(new Event(NameSpace.LoginEvent))"/>
		</mx:FormItem>
	</mx:Form>
	<mx:Label id="labStatus"/>
</mx:Panel>



PureLoginMVC.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:Application fontSize="12" xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init()" layout="absolute">
	<mx:Script>
		<![CDATA[
			import system.MyFacade;
			import org.puremvc.as3.patterns.facade.Facade;
			public function init():void{
				var myFacade:MyFacade = MyFacade.getInstance(); 
				myFacade.startup(this);
			}
		]]>
	</mx:Script>
</mx:Application>


src目录下system包下:

MyFacade.as

package system
{
import Controller.ApplicationCommand;
import Controller.LoginCommand;

import org.puremvc.as3.interfaces.IFacade;
import org.puremvc.as3.patterns.facade.Facade;

public class MyFacade extends Facade implements IFacade
{
public function MyFacade()
{
super();
}
//实现MyFacade的单例
public static function getInstance():MyFacade{
if(instance == null){
instance = new MyFacade();
}
return instance as MyFacade;
}
//初始化
override protected function initializeController():void{
super.initializeController();
   registerCommand(NameSpace.FacadeStart,ApplicationCommand);//注册开始命令
registerCommand(NameSpace.ApplicationLogin,LoginCommand);//注册登录命令
}
//开始的通知
public function startup(app:PureLoginMVC):void{
sendNotification(NameSpace.FacadeStart,app);
}

}
}

NameSpace.as

package system
{
public class NameSpace
{
public static const LoginProxyName:String = "LoginProxy";
public static const LoginSuccess:String = "loginSuccess";
public static const LoginFailed:String = "loginFailed";
public static const LoginEvent:String = "loginEvent";
public static const LoginMediatorName:String = "loginMediator";
public static const ApplicationLogin:String = "login";
public static const ApplicationMediatorName:String = "appliactionMediator";
public static const FacadeStart:String = "start";
}
}

src下Controller包

ApplicationCommand.as

package Controller
{
import org.puremvc.as3.interfaces.ICommand;
import org.puremvc.as3.patterns.command.MacroCommand;

public class ApplicationCommand extends MacroCommand implements ICommand
{
//构造器,可写可不写
public function ApplicationCommand()
{
super();
}
//写法一
override protected function initializeMacroCommand():void{
addSubCommand(ModelCommand);//添加model命令
addSubCommand(ViewCommand); //添加view命令
}

}
}
ModelCommand.as

package Controller
{
import model.LoginProxy;

import org.puremvc.as3.interfaces.ICommand;
import org.puremvc.as3.interfaces.INotification;
import org.puremvc.as3.patterns.command.SimpleCommand;

public class ModelCommand extends SimpleCommand implements ICommand
{
public function ModelCommand()
{
super();
}
override public function execute(notification:INotification):void
{
facade.registerProxy(new LoginProxy());//注册登录

}

}
}

ViewCommand。as

package Controller
{
import org.puremvc.as3.interfaces.ICommand;
import org.puremvc.as3.interfaces.INotification;
import org.puremvc.as3.patterns.command.SimpleCommand;

import view.ApplicationMediator;
import view.LoginMediator;

public class ViewCommand extends SimpleCommand implements ICommand
{
public function ViewCommand()
{
super();
}
//注册Mediator
override public function execute(notification:INotification):void
{
var app:PureLoginMVC = notification.getBody() as PureLoginMVC;
facade.registerMediator(new ApplicationMediator(app));//注册application中间人
facade.registerMediator(new LoginMediator(app));//注册登录中间人
}

}
}

LoginCommand。as

package Controller
{
import model.LoginProxy;
import model.vo.LoginVO;

import org.puremvc.as3.interfaces.ICommand;
import org.puremvc.as3.interfaces.INotification;
import org.puremvc.as3.patterns.command.SimpleCommand;

import system.NameSpace;

public class LoginCommand extends SimpleCommand implements ICommand
{
public function LoginCommand()
{
super();
}
override public function execute(notification:INotification):void{
var loginVO:LoginVO = notification.getBody() as LoginVO;
//var loginProxy:LoginProxy = new LoginProxy();
//从facade中获取proxy
var loginProxy:LoginProxy = facade.retrieveProxy(NameSpace.LoginProxyName) as LoginProxy;
loginProxy.CheckLogin(loginVO);
}

}
}

src下的model:
LoginProxy.as

package model
{


import model.vo.LoginVO;

import org.puremvc.as3.interfaces.IProxy;
import org.puremvc.as3.patterns.proxy.Proxy;

import system.NameSpace;

public class LoginProxy extends Proxy implements IProxy
{



public function LoginProxy()
{
super(NameSpace.LoginProxyName);//给登录通知一个参数名
}
//简单的进行判断
public function CheckLogin(vo:LoginVO):void{
if(vo.username =="test"&&vo.password == "test"){
sendNotification(NameSpace.LoginSuccess,vo);//发送成功的通知
}else{
sendNotification(NameSpace.LoginFailed);//发送失败的通知
}
}

}
}

  model。vo下的:
LoginVO.as
package model.vo
{
public class LoginVO
{
public var username:String;
public var password:String;
}
}

src下的viewbao下:
ApplicationMediator。as
package view
{
import model.vo.LoginVO;

import mx.controls.Label;

import org.puremvc.as3.interfaces.IMediator;
import org.puremvc.as3.interfaces.INotification;
import org.puremvc.as3.patterns.mediator.Mediator;

import system.NameSpace;

public class ApplicationMediator extends Mediator implements IMediator
{
private var loginApplication:PureLoginMVC;
//构造器,获取application实例
public function ApplicationMediator(app:Object)
{
super(NameSpace.ApplicationMediatorName,app);
loginApplication = app as PureLoginMVC;
}
//监听通知
override public function listNotificationInterests():Array{
return[NameSpace.LoginSuccess];
}
//响应通知
override public function handleNotification(notification:INotification):void{
switch (notification.getName()){
case NameSpace.LoginSuccess:
setLoginSuc(notification.getBody() as LoginVO);
break;
default:
break;
}
}

private function setLoginSuc(loginVO:LoginVO):void{
var label:Label = new Label();
label.text = "欢迎光临!"+loginVO.username;
loginApplication.addChild(label);
}

}
}

LoginMediator.as

package view
{
import flash.events.Event;

import model.vo.LoginVO;

import mx.managers.PopUpManager;

import org.puremvc.as3.interfaces.IMediator;
import org.puremvc.as3.interfaces.INotification;
import org.puremvc.as3.patterns.mediator.Mediator;

import system.NameSpace;

public class LoginMediator extends Mediator implements IMediator
{
//获取应用实例
private var loginPanel:LoginForm;
private var loginApplication:PureLoginMVC;
public function LoginMediator(app:Object)
{
super(NameSpace.LoginMediatorName,app);
loginApplication = app as PureLoginMVC;
loginPanel = new LoginForm();
loginPanel.addEventListener(NameSpace.LoginEvent,onLogin);
PopUpManager.addPopUp(loginPanel,loginApplication);
PopUpManager.centerPopUp(loginPanel);
}

//监听通知
override public function listNotificationInterests():Array{
var arr:Array = new Array();
arr.push(NameSpace.LoginSuccess);
arr.push(NameSpace.LoginFailed);
return arr;
}
//响应通知
override public function handleNotification(notification:INotification):void{
switch(notification.getName()){
case NameSpace.LoginSuccess:
setLoginSuc();
break;
case NameSpace.LoginFailed:
setLoginFailed();
break;
default:
break;
}
}
//登录成功,移除登录窗口
private function setLoginSuc():void{
PopUpManager.removePopUp(loginPanel);
}
//登录失败,提示
private function setLoginFailed():void{
loginPanel.labStatus.text ="用户名密码有误,请重试";
loginPanel.loginName.setFocus();
}

private function onLogin(evt:Event):void{
if(loginPanel.loginName.text!=""&&loginPanel.loginPassword.text!=""){
var loginVO:LoginVO = new LoginVO();
loginVO.username = loginPanel.loginName.text;
loginVO.password = loginPanel.loginPassword.text;
sendNotification(NameSpace.ApplicationLogin,loginVO);
}else{
loginPanel.labStatus.text = "请输入用户名和密码";
}
}

}
}
分享到:
评论
3 楼 ch_kexin 2011-08-10  
不好意思没有C#版的
2 楼 dandanlai 2011-07-29  
谢谢,真好的例子,让我理解了很多。
1 楼 Nancy771959506 2011-04-03  
有没有C#版的啊???

相关推荐

    PureMVC框架实例

    **PureMVC框架详解** PureMVC是一种轻量级、模型-视图-控制器(Model-View-Controller,MVC)框架,最初是为Flash/Flex应用设计的,但后来扩展到支持多种编程语言,包括JavaScript、Java、C#等。在Flex开发中,Pure...

    puremvc实例+中文文档

    在这个压缩包中,包含了一个用ActionScript实现的PureMVC实例以及一份中文文档,帮助开发者理解和应用这个框架。 一、PureMVC简介 PureMVC是基于经典的MVC设计模式的,它将应用程序的数据(模型Model)、用户界面...

    Flex puremvc 实例及说明(flex 4.6开发环境)

    在提供的“mvc HelloWord实例.doc”中,你可能找到一个基础的PureMVC入门示例。通常,这个例子会展示如何创建一个简单的“Hello, World!”应用程序,包括如何定义模型、视图和控制器组件,以及如何使用PureMVC的...

    PureMVC简单例子

    这个“PureMVC简单例子”是为了帮助初学者理解PureMVC框架的基本原理和实际操作流程。在这个例子中,我们将深入探讨各层的职责以及它们之间的通信机制。 首先,我们来了解一下MVC模式。MVC模式是一种软件设计模式,...

    pureMVC源代码

    1. **Multiton**:PureMVC引入了多实例(Multiton)模式,意味着每个`Model`、`View`和`Controller`都是全局唯一的,可以通过单例访问。 2. **Notifications**:PureMVC使用`Notification`作为组件间通信的机制,它...

    PureMVC C++架构代码

    8. **Facade(门面)**:门面是整个PureMVC架构的入口点,提供了一个简单的接口,用于初始化和访问系统中的所有其他组件。通过门面,开发者可以轻松地管理和协调应用程序的各个部分。 在压缩包文件`PureMVC_CPP_1_0...

    PureMVC.zip

    - 示例项目:可能包含一个简单的Unity项目,演示了如何在实际项目中使用PureMVC框架。 - 文档:可能有README或其他文档,解释如何在Unity项目中集成和使用PureMVC。 - 测试用例:可能包含测试代码,用于验证PureMVC...

    PureMVC 多模块通信 (PureMVC multi core)

    5. **Facade(门面)**:作为客户端应用程序与 PureMVC 框架之间的接口,Facade 提供了一个简单的方法来初始化和协调多模块应用程序。它管理所有模块的注册和通信,确保模块间的协作顺畅。 在提供的文件列表中,...

    pureMVC架构研究及实例

    PureMVC的实例通常包括一个简单的应用场景,用于演示如何组织代码和利用框架功能。例如,你可以创建一个Todo应用,其中Model管理待办事项的列表,View显示这些列表,并允许用户添加、删除和标记完成任务,而...

    pureMVC java版框架搭建例子

    标签"pureMVC java 框架搭建 登录"进一步明确了主题,强调了这是关于使用Java语言实现PureMVC框架,并且关注于框架的构建和一个实际的登录功能。 在"pureMVC例子"这个压缩包中,可能包含的文件有: 1. **Model** -...

    PureMVC结构pdf中文版

    《PureMVC结构pdf中文版》是对PureMVC框架的深度解析,主要针对Flex和ActionScript3开发者。这个文档提供了一套完整的理解、应用及优化PureMVC模式的方法。PureMVC是一个轻量级的、多层的架构框架,旨在简化开发过程...

    Lua实现PureMVC

    《Lua实现PureMVC》 PureMVC是一个轻量级的框架,主要用于构建多层应用程序。这个框架的设计理念是基于模型-视图-控制器(Model-View-Controller,MVC)模式,它提供了一种组织代码的方式,使得代码更易于理解和...

    雅虎天气puremvc例子 (改至网络)

    【雅虎天气PureMVC实例解析】 在编程领域,PureMVC是一种经典的多层架构设计模式,它为ActionScript、JavaScript、C#等语言提供了一种可复用的框架,用于构建模块化、松耦合的富应用。在这个“雅虎天气PureMVC例子...

    pureMVC加注释版

    - **创建Façade**: 为了方便地使用PureMVC框架,开发者需要首先创建一个Façade实例,并通过它来初始化框架和注册组件。 - **初始化Façade**: 初始化过程中,Façade会注册所有必要的组件,并准备好接收通知。 - *...

    pureMVC简单例子

    在这个简单的PureMVC示例中,我们将深入理解其核心概念和工作流程。 首先,让我们分解PureMVC的三个主要组件: 1. **Model(模型)**:这是应用程序的核心数据部分,负责存储和管理业务对象。在PureMVC中,模型...

    puremvc开发框架详解

    **Façade**:Façade是PureMVC框架中的门面类,它为用户提供了一个简单的接口来访问框架的核心功能。Façade类内部封装了Model、View和Controller的实例,通过这些实例来实现各个组件之间的通信。 **Core**:Core...

    PureMVC学习资料与案例

    PureMVC是一个开源的、轻量级的框架,主要用于构建多层架构的富客户端应用程序。这个框架最初是为ActionScript编程语言设计的,但后来发展成为支持多种编程语言,包括JavaScript、C#、Java等。它引入了一种结构化的...

    puremvc官方手册中英文版

    《PureMVC官方手册》是开发者们深入了解和学习PureMVC框架的重要参考资料,它提供了中英文两种语言版本,便于不同语言背景的程序员理解和应用。PureMVC是一个轻量级的、跨平台的Model-View-Controller(MVC)框架,...

    puremvc 框架源码及教程, 附带一个使用示例

    PureMVC是一个轻量级的、跨平台的、基于观察者模式的多层应用程序架构框架。这个框架的主要目的是为了简化开发过程,提供一种模块化、结构化的开发方式,以提高代码的可重用性和可维护性。在本教程中,我们将深入...

    pureMVC 源码

    纯MVC(PureMVC)是一个轻量级的框架,用于构建基于模型-视图-控制器(Model-View-Controller)设计模式的应用程序。在AS3.0版本中,PureMVC提供了强大的组织和管理代码的方式,使得开发者可以更有效地进行多层应用...

Global site tag (gtag.js) - Google Analytics