最简puremvc

最简puremvc_第1张图片工程如下,看来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)