工程如下,看来sendNotification是像comand和mediator发消息的

package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.text.TextField; public class Main extends Sprite
{
public var txt:TextField;
public var btn:MyButton;
public function Main()
{
if(stage) init();
else addEventListener(Event.ADDED_TO_STAGE,init);
}
private function init(e:Event=null):void
{
this.removeEventListener(Event.ADDED_TO_STAGE,init);
txt = new TextField();
txt.text = "hellopuremvc";
this.addChild(txt);
btn = new MyButton();
btn.y = 90;
this.addChild(btn) MyFacade.getInstance().startup(this);
}
}
}
package
{
import controller.MyCommand;
import org.puremvc.as3.interfaces.IFacade;
import org.puremvc.as3.patterns.facade.Facade;
public class MyFacade extends Facade implements IFacade
{
public static const STARTUP:String = "startup";
public static const CHANGETEXT:String = "changetext";
public static const CHANGECOMMAND:String = "changecommand";
public function MyFacade()
{
}
public static function getInstance():MyFacade
{
if(instance == null){
instance = new MyFacade();
}
return instance as MyFacade;
}
override protected function initializeController():void
{
super.initializeController();
registerCommand(STARTUP,MyCommand); }
public function startup(_main:Main):void
{
//启动puremvc环境
sendNotification(STARTUP,_main);
}
}
}
package controller
{
import org.puremvc.as3.interfaces.INotification;
import org.puremvc.as3.patterns.command.SimpleCommand; public class ChangeCommand extends SimpleCommand
{
public function ChangeCommand()
{
super();
}
override public function execute(note:INotification):void{
trace("ChangeCommand执行了");
}
}
}
package controller
{
import model.MyProxy;
import org.puremvc.as3.interfaces.INotification;
import org.puremvc.as3.patterns.command.SimpleCommand;
import view.BtnMediator;
import view.TextMediator; public class MyCommand extends SimpleCommand
{
public function MyCommand()
{
super();
}
override public function execute(note:INotification):void
{
var _main:Main = note.getBody() as Main;
this.facade.registerProxy(new MyProxy());
this.facade.registerMediator(new TextMediator(_main.txt));
this.facade.registerMediator(new BtnMediator(_main.btn));
this.facade.registerCommand(MyFacade.CHANGECOMMAND,ChangeCommand);
}
}
}
package model
{
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.net.URLLoader;
import flash.net.URLRequest;
import org.puremvc.as3.interfaces.IProxy;
import org.puremvc.as3.patterns.proxy.Proxy; public class MyProxy extends Proxy implements IProxy
{
public static const NAME:String = "MyProxy";
public function MyProxy(proxyName:String = null,data:Object = null)
{
super(NAME,data);
var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE,onComplete);
loader.addEventListener(IOErrorEvent.IO_ERROR,onError);
loader.load(new URLRequest("data.xml"));
}
private function onComplete(e:Event):void
{
var xml:XML = XML(e.target.data);
this.setData(xml);
}
private function onError(e:IOErrorEvent):void
{
trace("数据获取失败");
}
}
}
package view
{
import flash.display.SimpleButton;
import flash.events.MouseEvent; import org.puremvc.as3.interfaces.IMediator;
import org.puremvc.as3.patterns.mediator.Mediator; public class BtnMediator extends Mediator implements IMediator
{
public static const NAME:String = "BtnMediator";
public function BtnMediator(viewComponent:SimpleButton)
{
super(NAME,viewComponent);
btn.addEventListener(MouseEvent.CLICK,onClick);
}
private function onClick(evt:MouseEvent):void
{
sendNotification(MyFacade.CHANGETEXT);
sendNotification(MyFacade.CHANGECOMMAND);
//sendNotification 看来是给command和mediator发消息的
}
public function get btn():SimpleButton
{
return viewComponent as SimpleButton;
}
}
}
package view
{
import flash.text.TextField; import model.MyProxy; import org.puremvc.as3.interfaces.IMediator;
import org.puremvc.as3.interfaces.INotification;
import org.puremvc.as3.patterns.mediator.Mediator; public class TextMediator extends Mediator implements IMediator
{
public static const NAME:String = "TextMediator";
public function TextMediator(viewComponent:TextField)
{
super(NAME,viewComponent);
}
override public function listNotificationInterests():Array
{
return [MyFacade.CHANGETEXT,MyFacade.CHANGECOMMAND];//对MyFacade.CHANGETEXT感兴趣
}
override public function handleNotification(note:INotification):void
{
switch(note.getName()){
case MyFacade.CHANGETEXT:
var proxy:MyProxy = facade.retrieveProxy(MyProxy.NAME) as MyProxy;
var xml:XML = XML(proxy.getData());
txt.text = xml.msg; break;
case MyFacade.CHANGECOMMAND:
trace("mediator侦听command的命令也执行了");
break;
}
}
public function get txt():TextField
{
return viewComponent as TextField;
}
}
}

最简puremvc的更多相关文章

  1. CSharpGL(28)得到高精度可定制字形贴图的极简方法

    CSharpGL(28)得到高精度可定制字形贴图的极简方法 回顾 以前我用SharpFont实现了解析TTF文件从而获取字形贴图的功能,并最终实现了用OpenGL渲染文字. 使用SharpFont,美 ...

  2. Lua pureMVC

    分享一个lua语言版本的pureMVC. 这个是一个根据AS3(ActionScript 3) pureMVC而转换过来的lua pureMVC.所有的接口完全跟AS3版本一致,本来是想用在项目之中的 ...

  3. 简析.NET Core 以及与 .NET Framework的关系

    简析.NET Core 以及与 .NET Framework的关系 一 .NET 的 Framework 们 二 .NET Core的到来 1. Runtime 2. Unified BCL 3. W ...

  4. 第三十章 elk(1) - 第一种架构(最简架构)

    软件版本: es:2.4.0 logstash:2.4.0 kibana:4.6.1 一.logstash安装(收集.过滤日志.构建索引) 1.下载:https://www.elastic.co/do ...

  5. 简析 .NET Core 构成体系

    简析 .NET Core 构成体系 Roslyn 编译器 RyuJIT 编译器 CoreCLR & CoreRT CoreFX(.NET Core Libraries) .NET Core 代 ...

  6. 《大道至简》第一章读后感--JAVA语言伪代码形式

    import.java.大道至简.*; //一·愚公移山 import.java.愚公移山.*; public class YuGongYiShan { //原始需求:惩山北之塞,出入之迂 //项目沟 ...

  7. iOS离屏渲染简书

    更详细地址https://zsisme.gitbooks.io/ios-/content/chapter15/offscreen-rendering.html(包含了核心动画) GPU渲染机制: CP ...

  8. .NET简谈接口

    自从面向对象开发方式的出现,抽象的概念就开始日新月异的发展,面向对象编程.面向接口编程.面向组件编程等等:这一系列的概念都是软件工程所追求的思想范畴,高类聚低耦合. 今天我要简谈的是面向对象里面非常重 ...

  9. 《大道至简》第一章——编程的精义_读后感(Java伪代码形式)

    <大道至简>第一章——编程的精义_读后感(Java伪代码形式)1.愚公移山//愚公为团体的项目组织者.团体经理.编程人员.技术分析师等//子孙荷担者三人为三名技术人员//遗男为外协//目标 ...

随机推荐

  1. 记录一些容易忘记的属性 -- UIKeyboard

    //UIKeyboardWillShowNotification这个通知在软键盘弹出时由系统发送    //UIKeyboardWillShowNotification 通知:键盘将要显示的通知    ...

  2. Oracle Data Integrator 12c (12.1.2)新特性

    改进特性如下: 基于流程界面的声明式设计 在12c中,以前的接口(interface)已经改为映射(mapping),新的基于流程声明的设计方式更灵活,也更容易使用.在12c中,映射的实现是通过使用J ...

  3. JavaScript基础--超级玛丽(七)(上下左右控制)

    相信大家都玩过超级玛丽,下面实现控制玛丽的上.下.左.右等基本功能,本篇只是在练习JavaScript的用法 1.创建一个HTML页面 <!doctype html> <html l ...

  4. Apache目录结构(一)

    一.Apache 目录结构 bin: 该目录用于存放apache常用的命令,比如httpd cig-bin:该目录存放linux下的常用命令 .sh conf:存放配置文件httpd.conf,在ht ...

  5. C++11的new concepts (move semantic)

    MoveConstructible 和MoveAssignable MoveConstructible Specifies that an instance of the type can be mo ...

  6. iOS开发经验总结(转)

    在iOS开发中经常需要使用的或不常用的知识点的总结,几年的收藏和积累(踩过的坑). 一. iPhone Size 手机型号 屏幕尺寸 iPhone 4 4s 320 * 480 iPhone 5 5s ...

  7. hdu 2053

    Ps:找规律题....凡是平方数都是开...WA了一次..数组给的太小?...后来给到3000..就AC了 代码: #include "stdio.h"long long dp[3 ...

  8. 迪士尼黑科技:爬墙机器人 VertiGo

    12 月 30 日,迪士尼研发出的一款爬墙机器人曝光了一段有趣的视频.从视频里可看出这个机器人碰到墙壁时迅速地作出反应爬了上去. 据了解,这个爬墙机器人名叫 VertiGo,由迪士尼研究中心和苏黎世联 ...

  9. 关于offer选择

    6月1日收到移动调剂到昭通移动的电话,当时第一反应就是拒绝,后来参考了很久,犹豫了很久,答应了hr:答应了就有点后悔了:各种挑刺为难Hr;6月2日上午回绝hr: 问:陈姐,我有件重要的事忘记问了,在昭 ...

  10. 关于我和Github不得不说的一些小事

    你好,我叫黄雅婷,学号是1413042031,网络工程142班.因为小时候家里有很多课外书,有关神话和科学方面的杂志和书籍等,所以从小就喜欢看书,现在比较不挑,什么书都喜欢看,就是给我本字典,我也能看 ...