# eb4js **Repository Path**: fullstackclub/eb4js ## Basic Information - **Project Name**: eb4js - **Description**: javascript 的事件总线 - **Primary Language**: JavaScript - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2016-04-27 - **Last Updated**: 2022-11-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #eb4js #eb4js 概述 eb4js 是 javascipt 实现的事件总线库。基本理念是将任务拆分成事件和对事件的响应,从而实现模块解耦。 eb4js 实现了: - 拆分过度回调,避免回调深渊。 - 简化并发的异步逻辑,充分发挥性能。 - 与后台基于事件通信。 eb4js 不能做: - 同步逻辑下的性能提升 ## 首先需要引入 eb4js 库 - 直接引入 ```javascript ``` - CMD 规范下引入(SeaJS) ```javascript // 配置 seajs.config({ alias: { eb4js: 'eb4js.js' } }); // 使用 seajs.use(['eb4js'], function (eb4js) { // TODO }); // 或者 define('test', function (require, exports, modules) { var bus = require('eb4js')(); }); ``` - AMD规范下引入(RequireJS) ```javascript // 配置路径 require.config({ paths: { eb4js: "eb4js" } }); // 使用 require(["eb4js"], function (eb4js) { // TODO }); ``` ## 基础 API ### eb4js([name]) 引入的 `eb4js` 函数用来创建一个 bus ,可选的参数 name 指定 bus 的名字。bus 完全靠名字做区分,相同名字的 bus 已经存在时会直接返回而不会重新创建。默认的 name 是 "default". ``` var bus = eb4js(); ``` bus 对象有 `before`,`on`,`after`,`error`,四个注册事件接口,和 `next` 关联事件接口 , 和 `trigger` 触发事件接口。 每个事件就是一个有规则的字符串,可以自己指定。 ### bus.before(eventnames,callback) 注册某个事件执行前的响应函数。eg. ``` bus.before("test", function () { console.log("before test") }) ``` ### bus.on(eventname,callback) 注册某个事件的响应函数。eg. ``` bus.on("test",function(){ alert("test1"); }) ``` ### bus.after(eventname,callback) 注册某个事件执行后的响应函数。eg. ``` bus.after("test", function () { console.log("after test") }) ``` ### bus.error([eventname],callback) 注册某个事件执行错误的响应函数。eg. ``` bus.error("test", function () { console.log("after test") }) ``` 每个bus 对象有自己默认的总线错误事件,监听这个事件可以捕获总线的错误 ``` bus.error(function () { console.log("after test") }) ``` ### bus.next(eventname1,eventname2) 关联两个事件,第一个事件执行完,接着执行下一个事件(或多个事件)。eventname1,eventname2 都可以是多个事件,但是不能同时是多事件。 ``` bus.next("test",["nexttest","nexttest2"]); ``` ### bus.flow(e1,e2,[e3,...]) 按照顺序执行所有事件,内部通过 `next` 函数实现,所以,不能有连续的两个多事件,而且最少两个事件。 ``` bus.flow("nexttest","nexttest2"); ``` ### bus.trigger(eventname) 触发某个事件 ``` bus.trigger("test") ``` 也可以同时传递参数 ``` bus.trigger("test","argv") ``` ## 远程事件 - eventType 事件的类型,只能是以下类型之一 - conductor 发给事件中心的事件 - single 按照 BusType 挑选一个发送事件,主要用于对后端。 - assign 发给指定对象的事件,主要用于对前端。 - broadcast 按照 BusType 广播 - eventName 事件的名字 - serviceType 服务的类型 - fromEventName 保留