typescript事件通知机制
来源:互联网 发布:清除mysql表碎片 编辑:程序博客网 时间:2024/05/21 17:06
PS: 本文参考PureMVC
用到的模式是观察者模式,本来是自己想要一个事件通知机制,刚好看到pureMVC,于是单独把里面的事件通知剥离出来单独用,只有静态的方法,如果你想要考虑复用的话, 可以把静态改掉。代码如下
emitter.ts代码如下
/** * 事件 */export class Emitter { /** 监听数组 */ private static listeners = {}; /** * 注册事件 * @param name 事件名称 * @param callback 回调函数 * @param context 上下文 */ public static register(name: string, callback: Function, context: any) { let observers: Observer[] = Emitter.listeners[name]; if (!observers) { Emitter.listeners[name] = []; } Emitter.listeners[name].push(new Observer(callback, context)); } /** * 移除事件 * @param name 事件名称 * @param callback 回调函数 * @param context 上下文 */ public static remove(name: string, callback: Function, context: any) { let observers: Observer[] = Emitter.listeners[name]; if (!observers) return; let length = observers.length; for (let i = 0; i < length; i++) { let observer = observers[i]; if (observer.compar(context)) { observers.splice(i, 1); break; } } if (observers.length == 0) { delete Emitter.listeners[name]; } } /** * 发送事件 * @param name 事件名称 */ public static fire(name: string, ...args: any[]) { let observers: Observer[] = Emitter.listeners[name]; if (!observers) return; let length = observers.length; for (let i = 0; i < length; i++) { let observer = observers[i]; observer.notify(name, ...args); } }}/** * 观察者 */class Observer { /** 回调函数 */ private callback: Function = null; /** 上下文 */ private context: any = null; constructor(callback: Function, context: any) { let self = this; self.callback = callback; self.context = context; } /** * 发送通知 * @param args 不定参数 */ notify(...args: any[]): void { let self = this; self.callback.call(self.context, ...args); } /** * 上下文比较 * @param context 上下文 */ compar(context: any): boolean { return context == this.context; }}
测试代码:
import {Emitter} from "./emitter";class Test{ constructor(){ let self = this; Emitter.register("nihao", self.test, self); } public test(eventName:string, args1:string, args2:number){ console.log(eventName, args1, args2); console.log(arguments); }}let a = new Test();Emitter.fire("nihao", "cyrwpj", 1);
参数是不定的,需要什么传什么。
1 0
- typescript事件通知机制
- libevent事件通知机制
- Java事件通知机制
- DirectShow中的事件通知机制
- DirectShow中的事件通知机制
- DirectShow中的事件通知机制
- DirectShow中的事件通知机制
- epoll,IO事件通知机制
- Linux网络事件通知机制
- DirectShow之事件通知机制(转)
- 简单的事件通知机制实现
- RCP开发,view事件通知机制
- 深入源码-spring事件通知机制详解
- DirectShow开发快速入门之三事件通知机制
- DirectShow开发快速入门之事件通知机制
- DirectShow开发快速入门之三 -- 事件通知机制
- Direct Show开发 快速入门之事件通知机制
- DirectShow开发快速入门之事件通知机制
- 绝世秘籍之GNU构建系统与Autotool概念分析
- 二进制中1的个数
- Code::Blocks输出中文乱码问题解决方案
- C++学习日记
- sql with as 用法
- typescript事件通知机制
- 数据库事务再认识
- 18.模板引擎(2)
- java编码规范(Android)
- GO语言在Windows上的环境变量配置
- bash 小秘笈
- HDU 5808Price List Strike Back cdq分治+背包
- 教你搞定Android自定义View
- 灰色关联分析