Mais conteúdo relacionado Semelhante a 關於 Puremvc Command 的那點事 (20) 關於 Puremvc Command 的那點事7. Command
Command Command
Command
Command
Command
Command
不想學還是要學的
Command
命令 設計模式
Command Command
Command
Command Command
Command
Command
8. <<interface>>
ICommand
Controller execute():void
addCommand()
removeCommand()
//------------------- Command
doSomething()
execute():void
14. 你認識的第一支繼承 SimpleCommand 寫法
package com.mvc.controls
{
import org.puremvc.as3.interfaces.INotification;
import org.puremvc.as3.patterns.command.SimpleCommand;
public class StartupCommand extends SimpleCommand
{
public function StartupCommand()
{
super();
}
override public function execute(notification:INotification):void{
//初始 Application 要做的事情
//facade.registerMediator, facade.registerProxy
// or facade.registerCommand
//通常都會將 Application 傳進來做應用
}
}
}
16. 使用 MacroCommand 的 StartupCommand
package com.mvc.controls
{
import org.puremvc.as3.patterns.command.MacroCommand;
public class StartupCommand extends MacroCommand
{
public function StartupCommand()
{
super();
}
override protected function initializeMacroCommand() :void
{
addSubCommand( ModelPrepCommand );
addSubCommand( ViewPrepCommand );
addSubCommand( 你寫的Command );
}
}
}
25. package controllers
{
import flash.utils.setTimeout;
import org.puremvc.as3.multicore.interfaces.ICommand;
import org.puremvc.as3.multicore.interfaces.INotification;
import org.puremvc.as3.multicore.patterns.command.AsyncCommand;
public class AsyncCommand0 extends AsyncCommand implements ICommand
{
public function AsyncCommand0()
{
super();
}
override public function execute(notification:INotification):void{
trace("lalala AsyncCommand0");
setTimeout( commandComplete, 1000);
}
}
}
26. package controllers
{
import
org.puremvc.as3.multicore.patterns.command.AsyncMacroCommand;
public class StartupCommand extends AsyncMacroCommand
{
public function StartupCommand()
{
super();
}
private function onComplete():void{
trace("end of StartupCommand");
}
override protected function initializeAsyncMacroCommand():void{
setOnComplete( onComplete );
addSubCommand( AsyncCommand0 );
addSubCommand( AsyncCommand1 );
addSubCommand( AsyncCommand2 );
}
}
}
30. package controllers
{
import mx.rpc.AsyncToken;
import mx.rpc.IResponder;
import mx.rpc.http.HTTPService;
import org.puremvc.as3.multicore.interfaces.ICommand;
import org.puremvc.as3.multicore.interfaces.INotification;
import org.puremvc.as3.multicore.patterns.command.AsyncCommand;
public class LoadConfigCommand extends AsyncCommand implements IResponder
{
public function LoadConfigCommand()
{
super();
}
override public function execute(notification:INotification):void{
var service:HTTPService = new HTTPService;
service.resultFormat = 'xml';
service.url = "your configuration files url";
service.send();
}
public function result( result:Object ):void{
this.commandComplete();
}
public function fault( result:Object ):void{
//如果要中斷流程,需要在這邊傳出 ERROR notification 由其他 Command 處理
}
}
31. package controllers
{
import org.puremvc.as3.multicore.patterns.command.AsyncMacroCommand;
public class StartupCommand extends AsyncMacroCommand
{
public function StartupCommand()
{
super();
}
private function onComplete():void{
trace("end of StartupCommand");
sendNotification( "APP_INIT" );
}
override protected function initializeAsyncMacroCommand():void{
this.setOnComplete( onComplete );
addSubCommand( LoadConfigCommand );
addSubCommand( LoadAssetsCommand );
addSubCommand( LoadXXXCommand );
}
}
}
33. package com.controls
{
public class GroupEditorCommand extends SimpleCommand implements ICommand
{
public function GroupEditorCommand()
{
super();
}
override public function execute(notification:INotification):void
{
switch( notification.getName() ){
case "GroupEditorCommand.INIT":
//將之前開發用的 proxy notification 組織起來
facade.registerCommand( "DataProxy.ITEM_UPDATED" , GroupEditorCommand );
facade.registerCommand( "XXXProxy.NOTIFICATION_NAME" , GroupEditorCommand );
showLoader();
//看你要做什麼起始
break;
case "DataProxy.ITEM_UPDATED":
//看要叫 proxy 做啥,還是 call 啥畫面出來
break;
}
}
private function clearCommands():void{
facade.removeCommand( "DataProxy.ITEM_UPDATED" );
facade.removeCommand( "XXXProxy.NOTIFICATION_NAME" );
removeLoader();
sendNotification( "GroupEditorCommand.CLOSE" );
}
private function showLoader( string:String ):void{
//將檔畫面的 loader call 到前景
}
private function removeLoader():void{
//remove loader
}
}
}
39. 參考資料
• http://trac.puremvc.org/PureMVC_AS3/
• http://www.oreilly.com.tw/product_java.php?id=a163
• http://trac.puremvc.org/Utility_AS3_AsyncCommand