• Flex 学习笔记------全局事件


    全局事件

    在学习Flex的过程中,NavigatorContent 可以将不同的页面分离,这样很好的降低了代码的耦合度。但不同子页面间的数据传递或事件响应则显得稍微复杂。

    例如:

    <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头部加上:

    <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 之间进行通信,当然二者是不能够直接进行通信的。需要借助一个"第三方"和全局变量,设置全局变量主要有两种方式:

    1. parentApplication / parentDocument

    parentDocument 获取的是子页面的直接父文档对象,这里指代的就是 ViewStack 组件对象,可以在该组件中存如一些属性变量。

    parentApplication 获取的是最顶级的 Application 对象,对于一个完整的 Flex 项目来说,Application 对象只有一个,且每个子页面都可以获取到该对象的引用。因此也可以在 Application 中定义一些变量或方法。

    2. as 自定义类

    如果觉得在 Application 中管理这些变量或状态会使代码看上去比较臃肿,且耦合严重,这时可以适当的将这些变量抽象出来,组成一个静态类(窃习惯将之命名为Global.as)。这个类中声明的变量或方法都是静态的 static,为类所有,该类没有实例变量。

    上面两种方式只能做到共享全局变量,但无法触发状态的更改。因此这里需要一个全局事件。

    全局事件是一个自定义事件,代码如下:

    /**
     * 分发全局事件 所有的类都可以监听
     */
    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()
    -----------------------------一花开五叶 结果自然成-------------------------------------------------
  • 相关阅读:
    Chapter 1 First Sight——8
    Chapter 1 First Sight——7
    Chapter 1 First Sight——6
    Chapter 1 First Sight——5
    PAT1012
    Chapter 1 First Sight——4
    Chapter 1 First Sight——3
    需要注意的subList方法!和substring是不一样的!从源码解释他们的不同。
    餐桌项目删除餐桌
    addEventListener()绑定事件的对象方法。
  • 原文地址:https://www.cnblogs.com/zyc-undefined/p/3237595.html
Copyright © 2020-2023  润新知