zoukankan      html  css  js  c++  java
  • 最简puremvc

    工程如下,看来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;
            }
        }
    }
  • 相关阅读:
    小程序云开发 -- 云函数定时触发器配置
    小程序echarts 构建中国地图并锚定区域点击事件
    微信小程序接入百度OCR(身份证识别)
    微信小程序开发技巧总结(三)-- 云开发时效数据刷新和存储 (access_token等)
    微信小程序仿朋友圈功能开发(发布、点赞、评论等功能)
    微信小程序开发技巧总结(二) -- 文件的选取、移动、上传和下载
    SpringBoot Jpa 自定义查询
    SpringBoot Jpa 分页查询最新配置方式
    【软工】提问回顾与个人总结
    【软工】[技术博客] 用Monaco Editor打造接近vscode体验的浏览器IDE
  • 原文地址:https://www.cnblogs.com/as3lib/p/5166619.html
Copyright © 2011-2022 走看看