?? startupcommand.as
字號:
package cn.riahome.guestbook.puremvc.controller
{
import cn.riahome.guestbook.puremvc.model.InsertTopicProxy;
import cn.riahome.guestbook.puremvc.model.ListTopicProxy;
import cn.riahome.guestbook.puremvc.view.DetailPanelMediator;
import cn.riahome.guestbook.puremvc.view.InsertPanelMediator;
import cn.riahome.guestbook.puremvc.view.ListPanelMediator;
import org.puremvc.as3.interfaces.ICommand;
import org.puremvc.as3.interfaces.INotification;
import org.puremvc.as3.patterns.command.SimpleCommand;
/**
*
* 目前分析途徑: Main.mxml -> ApplicationFacade.as -> StartupCommand.as
* 完整分析途徑: Main.mxml -> ApplicationFacade.as -> StartupCommand.as -> ListTopicProxy.as -> ListPanelMediator.as
*
* 一旦收到通知 STARTUP 后, 就會執行這個 StartupCommand.
* 收到的通知里頭攜帶著數據, 這個數據作為參數傳遞給下面那個 execute() 函數了.
*
* 在這里, 主要的功能是注冊 Model 里的 Proxy(代理) 和 Controller 里的 Mediator(中介器)
* 看看 execute() 函數里的代碼, 無論是注冊 Proxy 還是 Mediator, 都是由 facade 對象的 registerProxy() 方法或 registerMediator() 方法完成的
* facade 對象是本類內部的一個家伙, 用來管理 Proxy 和 Mediator 的. 在后面的代碼里, 想要重新獲得 Proxy 或者 Mediator 都可以通過這個 facade 家伙.
* 是不是對這個 facade 對象感到很奇怪呢!? 如果想知道更多, 就得看 pureMVC 框架的源代碼了. 在這里簡要說一下:
* facade 是一個單例對象, 也就是說整個 swf 只有孤獨的它一個. 在你寫的 Proxy, Mediator 以及 Command 里都會有它的存在. 用它來管理 Proxy 和 Mediator 的.
* 就像最下面那行代碼 ( facade.retrieveProxy( ListTopicProxy.NAME ) as ListTopicProxy ).getAllTopic();
* 可以通過使用 retrieveProxy() 方法來找回相應的 Proxy, 要找回某個 Proxy, 就要傳遞那個 Proxy 的名字進去.
* 類似地, 也有 retrieveMediator() 方法來找回 Mediator.
* 在 facade 內部是使用數組來存放這些 Proxy 和 Mediator 的. 為什么能找到指定的 Proxy 或 Mediator 呢?
* 那是因為每一個 Proxy 或 Mediator 都有它自己的一個名字, 那個數組存儲 Proxy 或 Mediator 時, 是使用它們自身的名字來作為鍵(Key)進行存儲的.
* 要找到指定的 Proxy 或 Mediator, 只需知道它的名字就可以了.
**/
public class StartupCommand extends SimpleCommand implements ICommand
{
/**
* 這個函數要重寫啊.
**/
override public function execute(note:INotification):void
{
/**
* 下面兩個 Proxy 是用來與服務端通訊的. 它們負責著數據的 獲取 或 提交.
* InsertTopicProxy 是用來向服務端提交數據的, ListTopicProxy 是用來獲取數據的.
*
* 您可以按著 Ctrl 鍵點擊 ListTopicProxy, 看看它的內部如何
**/
facade.registerProxy( new InsertTopicProxy() );
facade.registerProxy( new ListTopicProxy() );
/**
* 記住, Mediator 是負責 UI(就是那些 component)的邏輯部分.
* 不管是數據驗證, 更新 UI 所顯示的數據, 還是其它亂七八糟的東西, 都由每塊UI(就是每塊 Component)所對應的 Mediator 來處理的.
* 例如: InsertPanelMediator 負責把對應的 InsertPanel(這是一個 component) 里的數據進行檢驗(對用戶輸入的數據進行檢驗正確與否),
* 檢驗無誤后, 就把數據交給 InsertTopicProxy 寫入數據庫. 而 UI(一個component) 本身不進行任何的數據處理或邏輯分析等等.
**/
var app:Main = note.getBody() as Main;
facade.registerMediator( new InsertPanelMediator( app.insertPanel ) );
/**
* 完整分析途徑: Main.mxml -> ApplicationFacade.as -> StartupCommand.as -> ListTopicProxy.as -> ListPanelMediator.as
* 下一站分析途徑為以下的 ListPanelMediator.
**/
facade.registerMediator( new ListPanelMediator( app.listPanel ) );
facade.registerMediator( new DetailPanelMediator( app.detailPanel ) );
/**
* 有些數據是在一開始的時候就需要的, 所以在這里就命令 ListTopicProxy 調用它的方法 getAllTopic() 來取得服務端上的數據.
* 通過 facade 對象的 retrieveProxy() 方法來找回指定的 Proxy.
* 在這里找回了 ListTopicProxy, 因為我把這個 ListTopicProxy 的名字作為參數傳遞進 retrieveProxy() 方法了.
*
* 以下代碼可以拆分為:
* var proxy:ListTopicProxy = facade.retrieveProxy( ListTopicProxy.NAME ) as ListTopicProxy;
* proxy.getAllTopic();
**/
( facade.retrieveProxy( ListTopicProxy.NAME ) as ListTopicProxy ).getAllTopic();
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -