Skip to main content

[AS3]PureMVC Utility - AsyncNotifier

下午剛好有位朋友問了我一個問題..「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 內(不需要事前註冊喔):

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

Popular posts from this blog

[AIR] JoSiResize - Mobile 開發小工具

JoSiResizev0.6.0,Adobe AIR 3 runtime之前開發 tool app 的時候並沒有很深刻的體認到圖片素材的 resize 是一個很麻煩的事情...畢竟圖片使用量並不大,等到開發遊戲類的 app 才發現光處理不同螢幕尺寸的圖片素材是一個相當折磨人的工作。
因此 JoSiResize app 誕生了~~~原理是採用最小 scale 長寬比例不變的方式進行放大縮小。使用方法非常簡單,設定好變更的尺寸,接下來,將需要處理的圖片檔案全選直接拖曳到視窗內,畫面即會跳出預備儲存的檔案夾選擇畫面,確認後即開始轉檔。

PureMVC for Titanium Mobile

為了秉持著哪裡都要用 PureMVC 的想法,試著修改 PureMVC 官網上提供的 Javascript 版本給 Titanium 使用。
**source code**
有任何問題請上:Titanium Mobile 中文開發者論壇

建立 instance 的方法:使用 Puremvc 為 namespace
Ti.include('puremvc-js-1.0.js');
var c = Puremvc.clone( Puremvc.SimpleCommand );
var p = Puremvc.clone( Puremvc.Proxy, "TestProxy", "This is TestProxy's data" );
var m = Puremvc.clone( Puremvc.Mediator , "MainMediator" );

[Unity] erinylin.lazylib - Cookie for PlayerPrefs

有鑑於 PlayerPrefs 測試與版本更新問題,將大家都愛用的 PreviewLabs.PlayerPrefs 打包起來,製作重點還是以懶人為主,基本上 PlayerPrefs 資料更新與數量並不可能會有強烈衝擊效能的狀況產生,所以為了方便開發,就弄了一個視覺化工具,方便除錯用。

雖然 PreviewLabs.PlayerPrefs 作者都宣告放棄他們的版權,不過為了尊重程式,僅僅加入了兩個公用函式,其他並無更改。

內有:
Cookie ManagerCookie 用 DataObject 混合編輯 ScriptableObject執行階段除錯視窗工具當然還是有懶人常數檔案輸出資料版本控制,方便更新版後儲存資料更新功能其實很多,有興趣的請自行到 Github 下載並參考範例吧!