/** * 创建一个事件模型 * - 为对象提供标准on、off、trigger方法 * - 非常像jQuery事件API的风格,支持事件名命空间等特性 * - 可以当mixin使用,也可以当成事件总线使用 * * ```ts * import { EventModel } from 'sunny-js' * const channel = new EventModel() * type TCallbackArgs = [boolean, number] * const callback: (...args: TCallbackArgs) => void = function callback(a, b) { * console.log(this, a, b) * } * // 触发一个事件 * channel.on('customEvent', callback) * channel.trigger('customEvent', true, 1) * // 注销事件 * channel.off('customEvent', callback) * channel.trigger('customEvent', true, 2) * // 不限定callback条件,进行注销事件 * channel.on('customEvent', callback) * channel.off('customEvent') * channel.trigger('customEvent', true, 3) * // 使用once,且绑定上下文 * channel.once('customEvent', callback, window) * channel.trigger('customEvent', true, 4) * channel.trigger('customEvent', true, 5) * ``` * * @category 事件通信 */ export declare class EventModel { private _events; private readonly _eveSplit; private readonly _nsSplit; /** * 事件匹配 * @param strEve 准备触发的事件 * @param strMatch 已绑定的事件 */ private _isMatchEve; private static _split; /** * 绑定一个事件 * * ```ts * import { EventModel } from 'sunny-js' * const channel = new EventModel() * // 常规 * channel.on('event', console.log) * // 添加命名空间 * channel.on('event.namespace', console.log) * ``` * * @param name 事件名称 * @param callback 监听函数 * @param context 绑定事件callback执行上下文 */ on(name: string, callback: (this: TContext, ...args: TCallbackArgs) => void, context?: TContext): EventModel; /** * 触发一个事件 * * ```ts * import { EventModel } from 'sunny-js' * const channel = new EventModel() * // 常规触发event * channel.trigger('event') * // 触发namespace下的event * channel.trigger('event.namespace') * ``` * * @param name 事件名称 * @param args 传递给事件监听函数的参数列表 */ trigger(name: string, ...args: TCallbackArgs): EventModel; /** * 绑定一个一次性事件 * * ```ts * import { EventModel } from 'sunny-js' * const channel = new EventModel() * // 常规 * channel.once('event', console.log) * // 添加命名空间 * channel.once('event.namespace', console.log) * ``` * * @param name 事件名称 * @param callback 监听函数 * @param context 绑定事件callback执行上下文 */ once(name: string, callback: (this: TContext, ...args: TCallbackArgs) => void, context?: TContext): EventModel; /** * 解除绑定 * * ```ts * import { EventModel } from 'sunny-js' * const channel = new EventModel() * // 常规 * channel.off('event') * // 注销指定命名空间下,指定事件名称的事件监听函数 * channel.off('event.namespace') * // 注销命名空间下的所有事件监听函数 * channel.on('event1.namespace', console.log) * channel.on('event2.namespace', console.log) * channel.on('event3.namespace', console.log) * channel.off('.namespace') * channel.trigger('.namespace') * ``` * * @param name 事件名称 * @param callback 函数筛选条件。如果传入非函数值将作为context筛选条件 * @param context callback执行上下文筛选条件 */ off(name?: string, callback?: ((this: TContext, ...args: TCallbackArgs) => void) | TContext, context?: TContext): EventModel; }