?? applicationfacade.as
字號:
package cn.riahome.guestbook.puremvc
{
import cn.riahome.guestbook.puremvc.controller.StartupCommand;
import org.puremvc.as3.interfaces.IFacade;
import org.puremvc.as3.patterns.facade.Facade;
public class ApplicationFacade extends Facade implements IFacade
{
/**
*
* 目前分析途徑: Main.mxml -> ApplicationFacade.as
* 完整分析途徑: Main.mxml -> ApplicationFacade.as -> StartupCommand.as -> ListTopicProxy.as -> ListPanelMediator.as
*
* 來到這里, 有必要說一下 MVC, 即 Model, View, Controller:
*
* Model:
* model => 數據! 本人覺得在 pureMVC 里, model 里有兩個主角: VO(Value Object) 和 Proxy(代理).
* VO 是數據的結構, 存儲數據的容器. 一條留言(TopicVO)就有ID值(id), 留言時間(addTime), 昵稱(username), 內容(content)
* Proxy 是負責獲得數據的. 獲得數據的方式有很多種, 可以獲得本地數據(swf本身里的數據), 也可以從互聯網上獲得數據, 當然從服務器上獲得數據也是常發生的事情.
* 而從非本地獲得數據可以是: http, remote...
*
* View:
* view => 顯示! 顧名思義, view 就是顯示的東西. 一切要顯示的東西都在這里了. 通常, 它也會有兩個主角: UI 和 Mediator(中介器)
* UI 就是那些要顯示的東西, 例如一個顯示留言的界面(就是一個component), 一個填寫留言的界面(也是一個component)
* Mediator 最最最重要的任務是處理有關 UI 的邏輯. 比如說更新 UI 上顯示的數據, 或者是提交數據, 又或者是驗證用戶輸入的數據
*
* Controller:
* controller => 邏輯! controller, 里頭都是一個命令(Command), 一些算法, 一些邏輯就在這里頭完成.
* Model 的 Proxy 獲得數據后, 可能需要把這些數據進行一些處理, 那就交由 Controller 里的那些 Command 處理吧.
* Model 的 Proxy 只負責著獲得數據, 具體的數據處理交給 Controller 的 Command 吧
* 例如: Proxy 獲得的數據可能是 變量/值 配對格式的數據, 而我需要的是 xml 格式的, 那就需要實現轉化了. 轉化過程就交給 command 了.
*
* 總的來說:
* View 用于顯示東西給用戶看的, 顯示的數據由 Model 提供. 有時候 Model 獲得的數據不一定就合 View 的胃口,
* 那么 Model 先把數據交給 Controller 處理好, 處理好后再交給 View 顯示出來.
*
* 那么, Model 是在什么時候把數據交給 View 層呢? 又是怎樣來交給 View 呢? 就是通過發布 "通知" 來實現的, 這個通知攜帶著數據. 這是 pureMVC 的消息機制.
*
* 無論您有沒有弄懂以上所說的, 都請您先把它記住!
*
* 以下定義了一些通知, 當這個通知發布出去時, 對這個通知感興趣的 Command 或者 Mediator 會接收這個通知.
*
**/
public static const STARTUP:String = "startup";
public static const GET_ALL_TOPIC_COMPLETE:String = "getAllTopicComplete"; // ListPanel 對這個通知感興趣
public static const SELECT_TOPIC:String = "selectTopic"; // DetailPanel 對這個通知感興趣
public static const INSERT_TOPIC_COMPLETE:String = "insertTopicComplete"; // ListPanel 對這個通知感興趣
/**
* 以下這個函數是采用單例模式, 也就是整個 swf 就只有它一個
**/
public static function getInstance():ApplicationFacade
{
if( instance == null ) instance = new ApplicationFacade();
return instance as ApplicationFacade;
}
/**
* 下面就是啟動整個 pureMVC 的函數
* sendNotification() 函數用來發布通知的, 這份通知書里裝著數據的.
* 第一個參數是通知書的標題(是一個唯一的標識符), 第二個參數是攜帶的數據(是MVC三者之間傳遞的數據).
**/
public function startup( app:Object ):void
{
sendNotification( STARTUP, app );
}
/**
* 重寫這個函數, 您也看到了, 使用 registerCommand() 函數來用注冊 command 的.
* 何謂 "注冊 Command" 呢? 就是使 "通知" 跟 command 對應起來.
* 下面就是把通知名 STARTUP 跟 StartupCommand 對應起來.
* 在任何時候任何地方, STARTUP 通知被發布了, StarupCommand 就會被執行.
* 每一個 command 里頭都有一個 execute() 函數的, execute() 函數的參數由誰來充當呢?
* 就是通知所攜帶的數據, 也就是上面 sendNotification() 函數的第二個參數.
*
* 好了, 從 Main.mxml 文件里的 creationComplete="facade.startup( this )" 語句中走到這里了,
* 現在得從 registerCommand( STARTUP, StartupCommand ) 語句中走到 StartupCommand 里了.
* 請您按著 Ctrl 鍵點擊一下 StartupCommand.
**/
override protected function initializeController():void
{
super.initializeController(); // 先調用父類的 initializeController() 方法, 看 pureMVC 源代碼可知, 調用這個方法會創建一個單例的 controller, 具體自己看了.
registerCommand( STARTUP, StartupCommand );
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -