下午剛好有位朋友問了我一個問題..「PureMVC Utility AsyncCommand 有沒有辦法等待 proxy 做反應?」,因為先前沒研究過此 Command 所以稍微花了些時間看一下它的運作邏輯。雖然最後討論的結果是設好 proxy call back 應該是可以等待 proxy 做完工作再執行下一個 subCommand,但是嚴格說起來,真正實作專案後發現,比較需要的是非同步 Notification 的處理。
由於 proxy 一些動作通常都是 onResult 後直接送出 Notification,光一個畫面可能會有好幾支 proxy 需要有順序性的完成資料讀取後,才可以將最終的 data 送到畫面內。這時候順序動作的 Command 就很浪費空間,因為可能一次要處理五六個 proxy 的 call back,這樣等於要等待幾個就需要寫幾支 Command....
為了解決這種非同步順序型的處理現有的 Notifications,就花了點時間弄了一支 AsyncNotifier 來用用囉~~
Project Name: pureMVC Utility - AsyncNotifier
Version: 1.0.0
Project Owner: Erin Lin
Description: An utility is under pureMVC for AS3.
Download: Standard & MultiCore versions
pureMVC website: http://puremvc.org/
先製作 AsyncHandleCommand 重點就是將你要處理的 Notifications 一次列在同一張 Command 的 execute 內(不需要事前註冊喔):
AsyncNotifier 是馬上執行,執行結束就清光
所以就是在你要執行時直接寫上:
Standard 用法:
MultiCore 版本:
接下來就是為了可以處理收過的資料才加上的功能...請小心服用:
執行位置:在你的 AsyncHandleCommand 內
由於 proxy 一些動作通常都是 onResult 後直接送出 Notification,光一個畫面可能會有好幾支 proxy 需要有順序性的完成資料讀取後,才可以將最終的 data 送到畫面內。這時候順序動作的 Command 就很浪費空間,因為可能一次要處理五六個 proxy 的 call back,這樣等於要等待幾個就需要寫幾支 Command....
為了解決這種非同步順序型的處理現有的 Notifications,就花了點時間弄了一支 AsyncNotifier 來用用囉~~
Project Name: pureMVC Utility - AsyncNotifier
Version: 1.0.0
Project Owner: Erin Lin
Description: An utility is under pureMVC for AS3.
Download: Standard & MultiCore versions
pureMVC website: http://puremvc.org/
先製作 AsyncHandleCommand 重點就是將你要處理的 Notifications 一次列在同一張 Command 的 execute 內(不需要事前註冊喔):
public class AsyncHandleCommand extends SimpleCommand implements ICommand
{
override public function execute(notification:INotification):void
switch( notification.getName() ){
case FirstNotificationName:
//
break;
case SecondNotificationName:
//
break;
}
}
AsyncNotifier 是馬上執行,執行結束就清光
所以就是在你要執行時直接寫上:
Standard 用法:
import org.puremvc.as3.utilities.asyncnotifier.AsnycNotifier;
var async:AsyncNotifier = new AsyncNotifier("YourName");
async.runAsyncNotifier( AsyncHandleCommand, FirstNotificationName , SecondNotificationName...etc );
MultiCore 版本:
import org.puremvc.as3.multicore.utilities.asyncnotifier.AsnycNotifier;
var async:AsyncNotifier = new AsyncNotifier("YourName");
async.initializeNotifier( multitonKey );
async.runAsyncNotifier( AsyncHandleCommand, FirstNotificationName , SecondNotificationName...etc );
接下來就是為了可以處理收過的資料才加上的功能...請小心服用:
執行位置:在你的 AsyncHandleCommand 內
//you also can use getNotificationByName( name) to get previous notification object.
var async:AsyncNotifier = facade.retrieveMediator( yourAsyncNotifierName ) as AsyncNotifier;
//沒錯 AsyncNotifier 是一支 Mediator =)
var prevNotification:INotification = async.getNotificationByName( FirstNotificationName );
// 這樣就可以抓到前面 run 過的 notification 物件,記得是 run 過的喔...別亂抓...
Comments
Post a Comment