加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

actionscript-3 – as3 – 从父swf到子swf的dispatchEvent

发布时间:2020-12-15 07:24:57 所属栏目:百科 来源:网络整理
导读:我有一个主要的“父”swf加载其他几个swfs.如果在主SWF中发生了某些事情,我需要告诉其中一个孩子swf. 这似乎相反,相反.任何一个孩子都可以简单地调用Event(),我可以设置主swf来监听事件.但是,我无法让子swf捕获父级调度的任何事件.怎么做? 解决方法 好的,所
我有一个主要的“父”swf加载其他几个swfs.如果在主SWF中发生了某些事情,我需要告诉其中一个孩子swf.

这似乎相反,相反.任何一个孩子都可以简单地调用Event(),我可以设置主swf来监听事件.但是,我无法让子swf捕获父级调度的任何事件.怎么做?

解决方法

好的,所以如果你已经知道了大部分内容,我很抱歉……但这似乎是一个非常普遍的问题,并不是很明显.

在AS3中,可以监听由显示列表上的对象调度的事件,因为它们冒泡显示列表层次结构而无需指定源对象. (当然假设事件的冒泡属性设置为true).因此,文档类(_root的旧概念)可以响应任何显示对象的鼠标点击,无论嵌套有多深,

addEventListener(MouseEvent.CLICK,_onMouseClick)

在任何其他情况下 – 例如bubbling设置为false,广播器不是显示列表上的InteractiveObject,或者(在您的情况下)侦听器低于显示列表层次结构中的广播器 – 广播事件的对象必须专门监听:

fooInstance.addEventListener(Event.BAR,_bazFunc)

?而不是公正的

addEventListener(Event.BAR,_bazFunc)

基本上,您需要将对父对象的引用传递给子swf,以便它可以将事件处理程序附加到它.

一种方法是通过显示列表将子事件从子类调度到父类(一旦子项加载并完全初始化).父级使用此事件的event.target属性来引用子级并在其上设置parentClass变量.然后可以使用它来附加侦听器:

package {


    class ChildClass 
    {
        private var __parentClass:ParentClass;

        // EventID to listen for in ParentClass
        public static const INITIALISED:String = "childInitialised";

        // Constructor
        function ChildClass() 
        {
            // Do initialising stuff,then call:
            _onInitialised();
        }

        private function _onInitialised():void
        {
            // Dispatch event via display hierarchy
            // ParentClass instance listens for generic events of this type
            // e.g. in ParentClass:
            //     addEventListener(ChildClass.INITIALISED,_onChildInitialised);
            //     function _onChildInitialised(event:Event):void {
            //         event.target.parentClass = this;
            //     }
            // @see mutator method "set parentClass" below
            dispatchEvent(new Event(ChildClass.INITIALISED,true);
        }

        public function set parentClass(value:ParentClass):void
        {
            __parentClass = value;

            // Listen for the events you need to respond to
            __parentClass.addEventListener(ParentClass.FOO,_onParentFoo,false,true);
            __parentClass.addEventListener(ParentClass.BAR,_onParentBar,true);
        }

        private function _onParentFoo(event:Event):void
        {
            ...
        }
    }
}

调度自定义的ChildSWFEvent – 即不使用上面定义的类定义 – 将使这更加灵活,因为ParentClass实例可以监听任何子swf广播的常见ChildSWFEvent.INITIALISED事件,并将上下文有用的信息作为附加信息传递参数.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读