Flex 學習筆記------全局事件

全局事件

在學習Flex的過程當中,NavigatorContent 能夠將不一樣的頁面分離,這樣很好的下降了代碼的耦合度。但不一樣子頁面間的數據傳遞或事件響應則顯得稍微複雜。app

例如:學習

<mx:ViewStack id="viewStack" resizeToContent="true" horizontalCenter="0">
    <s:NavigatorContent id="fabricSelectContent" label="子頁面1" creationPolicy="auto">
        <subpages:myPage1/>
    </s:NavigatorContent>
    <s:NavigatorContent id="patternUploadContent" label="子頁面2">
        <subpages:myPage2/>
    </s:NavigatorContent>
</mx:ViewStack>

這裏就將 myPage1 和 myPage2 兩個子頁面分離了,這樣兩個頁面的功能能夠單獨編寫。subpages是自定義的一個命名空間,須要在 application頭部加上:flex

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
               xmlns:s="library://ns.adobe.com/flex/spark"
               xmlns:mx="library://ns.adobe.com/flex/mx"
               xmlns:subpages="*" >

若是這時 myPage2 須要獲取 myPage1 的數據或者 myPage1 中的某個狀態變換須要改變 myPage2 中的某個狀態,即 myPage1 須要與 myPage2 之間進行通訊,固然兩者是不可以直接進行通訊的。須要藉助一個"第三方"和全局變量,設置全局變量主要有兩種方式:spa

1. parentApplication / parentDocument

parentDocument 獲取的是子頁面的直接父文檔對象,這裏指代的就是 ViewStack 組件對象,能夠在該組件中存如一些屬性變量。code

parentApplication 獲取的是最頂級的 Application 對象,對於一個完整的 Flex 項目來講,Application 對象只有一個,且每一個子頁面均可以獲取到該對象的引用。所以也能夠在 Application 中定義一些變量或方法。xml

2. as 自定義類

若是以爲在 Application 中管理這些變量或狀態會使代碼看上去比較臃腫,且耦合嚴重,這時能夠適當的將這些變量抽象出來,組成一個靜態類(竊習慣將之命名爲Global.as)。這個類中聲明的變量或方法都是靜態的 static,爲類全部,該類沒有實例變量。對象

上面兩種方式只能作到共享全局變量,但沒法觸發狀態的更改。所以這裏須要一個全局事件。blog

全局事件是一個自定義事件,代碼以下:事件

/**
 * 分發全局事件 全部的類均可以監聽
 */
package events {
import flash.events.EventDispatcher;
import flash.events.IEventDispatcher;

public class Dispatcher extends EventDispatcher {
    private static var instance:Dispatcher;

    public function Dispatcher(target:IEventDispatcher = null) {
        super(target);
    }

    public static function getInstance():Dispatcher {
        if (instance == null) {
            instance = new Dispatcher();
        }
        return instance;
    }
}
}

監聽事件:文檔

Dispatcher.getInstance().addEventListener()

觸發事件:

Dispatcher.getInstance().dispatchEvent()
相關文章
相關標籤/搜索