Egret之自定义事件

简介:

验证:谁发送,谁接收
Event :

module demo{
    export class myEvent extends egret.Event{
        public static readonly _DEMO_EVENT : string = "_demo_event";
        private _data : ImyEventName = null;
        public constructor( $ty :  string , $data : ImyEventName ){
            super( $ty , false , false );
            this._data = $data;
        }
        public get Data() : ImyEventName{
            return this._data;
        }
    }

    export interface ImyEventName{
        /**发送者*/
        _sender : string;
        _dispatcher : myDispacherEvent;
    }
}

EventDispatcher:

module demo{
    export class myDispacherEvent extends egret.EventDispatcher{
        /**
         * 发送事件
         * @param {string} $ty
         * @param {string} $myName
         */
        public sender( $ty : string , $myName : string ) : void{
            let $event : myEvent = new myEvent(
                $ty,
                {
                    _sender : $myName,
                    _dispatcher : this
                }
            );
            this.dispatchEvent( $event );
        }
    }
}

测试代码:

    private $dispatcher_0 : demo.myDispacherEvent = null;
    private $dispatcher_1 : demo.myDispacherEvent = null;
    /**
     * preload资源组加载完成
     * Preload resource group is loaded
     */
    private onResourceLoadComplete(event: RES.ResourceEvent) {
        if (event.groupName == "preload") {
            this.stage.removeChild(this.loadingView);
            RES.removeEventListener(RES.ResourceEvent.GROUP_COMPLETE, this.onResourceLoadComplete, this);
            RES.removeEventListener(RES.ResourceEvent.GROUP_LOAD_ERROR, this.onResourceLoadError, this);
            RES.removeEventListener(RES.ResourceEvent.GROUP_PROGRESS, this.onResourceProgress, this);
            RES.removeEventListener(RES.ResourceEvent.ITEM_LOAD_ERROR, this.onItemLoadError, this);
            // this.createGameScene();
            this.$dispatcher_0 = new demo.myDispacherEvent();
            this.$dispatcher_0.addEventListener( demo.myEvent._DEMO_EVENT , this.onDemo , this );
            this.$dispatcher_1 = new demo.myDispacherEvent();
            this.$dispatcher_1.addEventListener( demo.myEvent._DEMO_EVENT , this.onDemo , this );

            this.$dispatcher_0.sender( myEvent._DEMO_EVENT , "Aonaufly" );
            this.$dispatcher_1.sender( myEvent._DEMO_EVENT , "Ainy" );
        }
    }

    private onDemo( $e : demo.myEvent ) : void{
        if( $e.type == demo.myEvent._DEMO_EVENT ){
            egret.log(`发送者:${$e.Data._sender}, dispatcher_0 : ${ $e.Data._dispatcher == this.$dispatcher_0 }`);
        }
    }

结果:
Egret之自定义事件

Aonaufly 发送的 , Ainy是不会触发的 , 切记。。。。。。













本文转自Aonaufly51CTO博客,原文链接: http://blog.51cto.com/aonaufly/2056127,如需转载请自行联系原作者


相关文章
|
12天前
基于taro组件scrollView实现pickview
通过以上步骤,你可以在 Taro 应用中使用 `ScrollView` 和 `PickerView` 组件来实现一个基于 `PickerView` 的选择器,用户可以在垂直滚动中进行选择。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
11 0
|
23天前
|
前端开发 数据可视化 JavaScript
如何在React中监听鼠标事件
如何在React中监听鼠标事件
22 0
|
4月前
uniapp滑动事件
uniapp滑动事件
73 0
|
6月前
|
JavaScript 前端开发
36Vue - 事件处理器(监听事件)
36Vue - 事件处理器(监听事件)
14 0
|
8月前
|
JavaScript 前端开发
vue快速入门(四) 之 v-on:事件绑定 以及 @keyup事件触发
vue快速入门(四) 之 v-on:事件绑定 以及 @keyup事件触发
176 0
|
10月前
Taro + Taro UI实现列表下拉刷新,无限滚动 #106
Taro + Taro UI实现列表下拉刷新,无限滚动 #106
749 0
|
Android开发
autojs-Hook按钮点击事件
牙叔教程 简单易懂
503 0
|
缓存 JavaScript 测试技术
vue3源码分析——实现props,emit,事件处理等
由于是测试dom,jest需要提前注入下面的内容,让document里面有app节点,下面测试用例类似在html中定义一个app节点哦
|
前端开发 JavaScript
react 组件之事件 event
事件和组件的属性,状态state 一样,都是组件的一个属性,按照之前React对组件的约定,由于事件本质上是一个属性,因此也需要使用小驼峰命名法
react 组件之事件 event
|
小程序
关于Taro 中的事件冒泡的坑
在小程序中 天生有catchTap事件可以阻断事件冒泡 所以可以 <view catchTap="clickHandler"></view> 复制代码 来阻止事件传播 在taro中 官方推荐使用e.stopPropagation()阻断事件冒泡 但是在小程序中 e.stopPropagation() 是一个空函数
关于Taro 中的事件冒泡的坑