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()
相关文章
相关标签/搜索