• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
關於 Puremvc Command 的那點事
 

關於 Puremvc Command 的那點事

on

  • 4,141 views

PureMVC Command 相關應用

PureMVC Command 相關應用
http://erinylin.blogspot.com/
勘誤:
Page20 為 : 啥叫非同步 Command?

Statistics

Views

Total Views
4,141
Views on SlideShare
1,856
Embed Views
2,285

Actions

Likes
2
Downloads
13
Comments
0

19 Embeds 2,285

http://erinylin.blogspot.com 1689
http://erinylin.blogspot.tw 430
http://www.erinylin.com 109
http://erinylin.blogspot.hk 18
http://www.josiapps.com 5
http://erinylin.blogspot.jp 5
http://translate.googleusercontent.com 5
url_unknown 5
http://erinylin.blogspot.com.au 4
http://cncc.bingj.com 3
http://erinylin.blogspot.com.br 2
http://erinylin.blogspot.in 2
http://www.erinylin.blogspot.com 2
http://erinylin.blogspot.co.uk 1
http://erinylin.blogspot.it 1
http://erinylin.blogspot.de 1
http://erinylin.blogspot.kr 1
http://erinylin.blogspot.fr 1
http://erinylin.blogspot.mx 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    關於 Puremvc Command 的那點事 關於 Puremvc Command 的那點事 Presentation Transcript

    • 關於 PureMVC Command 的 那點事 Erin Lin http://about.me/erinlin
    • 到處都有 Command...
    • Command 是?
    • Command 是?
    • Command 是?
    • Command 是?
    • CommandCommand CommandCommand Command Command Command 不想學還是要學的 Command 命令 設計模式 Command Command CommandCommand Command Command Command
    • <<interface>> ICommand Controller execute():void addCommand() removeCommand()//------------------- Command doSomething() execute():void
    • 真情推薦傻瓜都可以看懂的設計模式入門書 自己上網去買! http://www.oreilly.com.tw/product_java.php?id=a163
    • 回到 PureMVC...
    • PureMVC兩個基本必知 Command
    • 最基本的SimpleCommand
    • 反正要亂搞就是 extendsSimpleCommand
    • 你認識的第一支繼承 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 傳進來做應用 } }}
    • 群組同時執行的MacroCommand
    • 使用 MacroCommand 的 StartupCommandpackage 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 ); } }}
    • 啊...我想要一個命令做完, 才要執行下一個....最後還要來個完美的 Ending 要怎麼辦?
    • http://trac.puremvc.org/PureMVC_AS3/ PureMVC Utilities 使用的時候要心存感激喔!
    • 處理非同步的 AsyncCommand http://trac.puremvc.org/Utility_AS3_AsyncCommand
    • 啥叫非同步?
    • 當然就是一件工作做完 才做下一個指令 照順序來不懂嗎?
    • AsyncCommand 也有 兩個 Class 給你用
    • AsyncCommand andAsyncMacroCommand
    • 基本用法是以成組的方式應用
    • 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); } }}
    • package controllers{ importorg.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 ); } }}
    • AsyncCommand DEMO
    • 所以 Command 可以做什麼?
    • 應用一:Assets loader
    • 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 處理 } }
    • 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 ); } }}
    • 應用二:做外掛...
    • 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 } }}
    • 其他?
    • 其實你要怎樣玩它 就開心的玩吧!想太多就什麼都寫不出來了!
    • 最後...
    • 請保持愉快的心情開心的寫程式吧!
    • FIN
    • 參考資料• http://trac.puremvc.org/PureMVC_AS3/• http://www.oreilly.com.tw/product_java.php?id=a163• http://trac.puremvc.org/Utility_AS3_AsyncCommand