{
import flash.display.Sprite;
import flash.events.Event;
import KingClass.ApplicationFacade
/**
* ...
* @author Never
*/
public class Main extends Sprite
{
//通过单例模式 获取ApplicationFacade
private var facade:ApplicationFacade = ApplicationFacade.getInstance();
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
//启动PureMVC,在应用程序中调用此方法,并传递应用程序本身的引用
facade.startup(this);
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
}
}
}
import KingClass.Controller.StartupCommand;
import org.puremvc.as3.patterns.facade.Facade;
public class ApplicationFacade extends Facade {
public static const STARTUP:String = "startup";
public static const CHANGETABLE:String = "changeTable";
//得到ApplicationFacade单例的工厂方法
public static function getInstance():ApplicationFacade {
if (instance == null)
instance = new ApplicationFacade();
return instance as ApplicationFacade;
}
/*启动PureMVC,在应用程序中调用此方法,并传递应用程序本身的引用
有一个可选的“报体”,“报体”可以是任意ActionScript对象。*/
public function startup(app:Object):void {
sendNotification(STARTUP, app);
}
//注册Command,建立Command与Notification之间的映射
override protected function initializeController():void {
super.initializeController();
registerCommand(STARTUP, StartupCommand);
}
}
}
{
import KingClass.ApplicationFacade;
import org.puremvc.as3.patterns.command.MacroCommand;
public class StartupCommand extends MacroCommand
{
override protected function initializeMacroCommand():void{
this.addSubCommand(ModelPrepCommand);
this.addSubCommand(ViewPrepCommand);
/* 注册添加、删除用户命令 */
facade.registerCommand(ApplicationFacade.CHANGETABLE,ChangeComman);
}
}
}
{
import org.puremvc.as3.patterns.command.SimpleCommand;
import org.puremvc.as3.interfaces.INotification;
import KingClass.Model.ShowProxy;
/**
* ...
* @author Never
*/
public class ModelPrepCommand extends SimpleCommand
{
public function ModelPrepCommand() {
return;
}
override public function execute(notification:INotification):void
{
/* 注册Model */
facade.registerProxy(new ShowProxy());
}
}
}
{
import org.puremvc.as3.patterns.command.SimpleCommand;
import org.puremvc.as3.interfaces.ICommand;
import org.puremvc.as3.interfaces.INotification;
import KingClass.View.*;
/**
* ...
* @author Never
*/
public class ViewPrepCommand extends SimpleCommand
{
public function ViewPrepCommand() {
return;
}
override public function execute(notification:INotification):void
{
var obj:Main;
obj = notification.getBody() as Main;
facade.registerMediator(new ShowMediator(obj));
facade.registerMediator(new TopMediator(obj));
return;
}
}
}
{
import flash.display.DisplayObject;
import org.puremvc.as3.patterns.mediator.Mediator;
import org.puremvc.as3.interfaces.IMediator;
import org.puremvc.as3.interfaces.ICommand;
import org.puremvc.as3.interfaces.INotification;
import KingClass.Model.ShowProxy;
import KingClass.View.Components.ShowCom;
import KingClass.ApplicationFacade
import KingClass.Model.Vo.IndexVo;
/**
* ...
* @author Never
*/
public class ShowMediator extends Mediator implements IMediator
{
public static const NAME:String = "ShowMediator";
private var _showCom:ShowCom = new ShowCom();
public function ShowMediator(viewComponent:DisplayObject = null)
{
super(NAME, viewComponent);
main.addChild(_showCom);
}
private function get main():Main {
return viewComponent as Main;
}
override public function listNotificationInterests():Array {
return [
ApplicationFacade.CHANGETABLE
];
}
override public function handleNotification(notification:INotification):void {
switch(notification.getName()) {
case ApplicationFacade.CHANGETABLE:
_showCom.Goto(int((facade.retrieveProxy(ShowProxy.NAME) as ShowProxy).newData.index));
break;
}
}
//end class
}
}
{
import flash.display.DisplayObject;
import KingClass.Model.Vo.IndexVo;
import org.puremvc.as3.patterns.mediator.Mediator;
import org.puremvc.as3.interfaces.IMediator;
import KingClass.Event.UIEvent
import KingClass.View.*;
import KingClass.Model.*;
import KingClass.View.Components.TopCom
/**
* ...
* @author Never
*/
public class TopMediator extends Mediator implements IMediator
{
public static const NAME:String = "TopMediator";
/*因为Mediator也会经常和Proxy交互,所以经常在Mediator的构造方法中取得Proxy实例的引用并保存在Mediator的属性中,这样避免频繁的获取Proxy实例*/
private var _showProxy:ShowProxy = new ShowProxy();
public function TopMediator(viewComponent:DisplayObject = null)
{
super(NAME, viewComponent);
viewComponent.addEventListener(TopCom.EVENT_BTN_CLICK, onEventClick );
var _TopCom:TopCom = new TopCom();
_TopCom.y = 180;
main.addChild(_TopCom);
}
private function get main():Main {
return viewComponent as Main;
}
private function onEventClick(e:UIEvent = null):void {
_showProxy.newData=new IndexVo(e.data as int)
}
//end class
}
}
{
import KingClass.Model.Vo.IndexVo;
import org.puremvc.as3.patterns.observer.Notification;
import org.puremvc.as3.patterns.proxy.Proxy;
import org.puremvc.as3.interfaces.IProxy;
import KingClass.ApplicationFacade;
/**
* ...
* @author Never
*/
public class ShowProxy extends Proxy implements IProxy
{
public static const NAME:String = "ShowProxy";
private var newdata:Object;
public function ShowProxy(str:String=""):void
{
super(NAME, str);
}
//Proxy是有状态的,当数据发生改变时 我们发送一个Notification。
public function set newData(n:Object):void{
newdata = n;
sendNotification(ApplicationFacade.CHANGETABLE,this)
}
/* 添加项 */
public function get newData():Object{
return this.newdata;
}
}
}
{
/**
* ...
* @author Never
*/
public class IndexVo extends Object
{
private var _index:int;
public function IndexVo(n:int)
{
this.index=n
}
public function set index(n:int):void {
this._index = n;
}
public function get index():int{
return this._index;
}
}
}
{
import org.puremvc.as3.patterns.command.SimpleCommand;
import org.puremvc.as3.interfaces.ICommand;
import org.puremvc.as3.interfaces.INotification;
import KingClass.View.Components.TopCom;
import KingClass.Model.ShowProxy;
/**
* ...
* @author Never
*/
public class ChangeComman extends SimpleCommand
{
public function ChangeComman()
{
}
override public function execute(notification:INotification):void
{
/* 注册Model */
var showProxy:ShowProxy = notification.getBody() as ShowProxy;
facade.registerProxy(showProxy);
}
//end class
}
}