`

javascript事件总线

阅读更多

事件模式是界面层主要模式,MVC模式中,模型组件应该和界面形成松耦合,只要界面发出事件,就应该立即响应,MVC模式也是依靠事件模式来实现彼此联系,所以,有时,我们抛开MVC模式这个锅盖,专注于事件模式,反而会有一种比较开阔的感觉。

Javascript可以避免错误类型的共享,以及避免UI界面线程,这样实现事件模式就非常简单(相对Java等语言),
[URL=http://blogs.msdn.com/simonince/archive/2009/12/21/a-javascript-event-bus.aspx]A JavaScript Event Bus[/URL]一文给出了Javascript的事件总线event bus实现案例。

使用一个Event Bus接受所有的事件,然后发布给所有的监听者:

Type.registerNamespace('Sample')
 //创建一个事件总线


Sample.EventBus = function() {
    Sample.EventBus.initializeBase(this
);
}
 
Sample.EventBus.prototype = {
    
//一对一激活提交事件


    subscribe: function subscribe(eventType, callback) {
        this
.get_events().addHandler(eventType, callback);
    },
    
//一对多广播发布事件


    publish: function publish(eventType, arg) {
        var
 handler = this
.get_events().getHandler(eventType);
        if
 (handler)
            handler(arg);
    }
}
 
Sample.EventBus.registerClass('Sample.EventBus', Sys.Component);


事件类型eventType用来标识传给总线消息类型,是一个重要的输入参数,当然我们可以使用字符串来实eventType,比如"mySendEvent",但是使用一个和目标target绑定机制可能更好,如下:
Sample.EventBus.registerEventType =
   function registerEventType(target, eventType) {
    if
 (!target.Events)
        target['Events'] = {};
    target.Events[eventType] = eventType;
}


使用注册事件类型如下:
// simple class to carry data values with event



//创建一个带有事件数据的对象


Sample.Payload = function(dataValue) {
    this
.data = dataValue;
}
 

// definition of event types relevant to Payload class


Sample.EventBus.registerEventType(Sample.Payload, 'Update');

//注册Click点按事件


Sample.EventBus.registerEventType(Sample.Payload, 'Click');



我们可以使用下面代码激活事件:
//广播群发事件


bus.publish(Sample.Payload.Events.Update, new
 Sample.Payload('Some Data'));

//一对一激活一个事件,类似MVC中Controller或Action


bus.subscribe(Sample.Payload.Events.Update, function(arg) {
    
// perform some action


});



这个事件总线可以加入更多功能:日志logging, 跟踪tracing, 转换translation, or 定期执行scheduled execution(切分激活动作单独执行,异步,这样可以避免堵塞UI线程)。

相比服务器端的事件模式,JS实现起来够简单。

 

原文:http://www.jdon.com/jivejdon/thread/37882

分享到:
评论

相关推荐

    verkehrjs:一个极简的 JavaScript 事件总线

    JavaScript 事件总线,如 `verkehrjs`,是一种轻量级的设计模式,用于在复杂的JavaScript应用程序中实现组件之间的通信。在大型应用中,不同模块之间的数据传递和事件监听经常成为一个挑战,事件总线可以有效地解决...

    Node.js-EventBusOttoRxBus事件总线使用

    在Android应用开发中,事件总线(Event Bus)是一种设计模式,用于简化组件之间的通信,它替代了传统的回调或显式接口调用。本教程将详细讲解Node.js中的EventBus、Otto以及RxBus这三种事件总线的使用方法。 首先,让...

    Node.js-一个事件总线框架用于事件驱动编程

    然而,这里提到的是在 Node.js 环境下使用事件总线框架进行事件驱动编程,这可能涉及到自定义实现或使用特定的库,如 `eventemitter3` 或 `busboy`。 在 Node.js 中,内置的 `events` 模块提供了 EventEmitter 类,...

    Node.js-EasyEventBus一个轻量级的事件总线库

    1. **事件(Event)**:事件是事件总线中的基本单元,通常是一个包含特定数据的对象,用于传递信息。 2. **发布者(Publisher)**:发布者是触发事件的组件,它通过调用事件总线的`emit`方法来发布事件。 3. **订阅...

    Vuejs的事件总线bus

    Vue.js的事件总线(Event Bus)是一种轻量级的通信机制,用于在不相关的组件之间传递信息。在大型Vue项目中,当组件之间没有直接的父子关系或祖孙关系时,事件总线提供了一种灵活的方式来解耦组件。本文将深入探讨...

    Vue组件通信中央事件总线实例

    介绍Vue组件之间的通信方式,本资源主要是介绍中央事件总线这种模式,代码中详细示范了如何使用中央事件总线来通信

    [转]事件总线,解决各种和addEventListener有关的麻烦

    至于“工具”,可能是指存在一些现成的事件总线库,如JavaScript的EventBus、发布/订阅库(如RxJS)等,这些工具可以帮助开发者快速地实现事件驱动的架构。 在压缩包中的“com”文件可能包含了事件总线的实现代码,...

    eventbus:适用于js的微型,快速,零依赖事件总线

    一个很小的,快速的,零依赖JavaScript事件总线。 描述 压缩后少于500个字节+已压缩 零依赖 现代语法 快速地 简单的 已输入 安装 只需下载index.js,或使用以下选项之一: yarn add @mxttwoods/eventbus 或者 npm...

    pubsub:适用于JavaScript的微型,快速,零依赖事件总线

    一个很小的,快速的,零依赖JavaScript事件总线。 描述 压缩后少于500个字节+已压缩 零依赖 现代语法 快速地 简单的 已输入 安装 只需下载index.js,或使用以下选项之一: yarn add @mxttwoods/pubsub 或者 yarn ...

    minibus:JavaScript 的最小事件总线

    用于 JavaScript 的最小事件总线又名消息调度程序。 基本示例 > var bus = Minibus.create() > var route = bus.on('out-of-fuel', function () { console.log('Hitchhike.') }); > bus.emit('out-of-fuel') ...

    Vue.js的事件总线-JavaScript开发

    vue-bus Vue.js的事件总线,同时支持Vue 1.0和2.0。 有关更多详细信息,请参见Vue文档。 安装您可以通过yarn或npm安装它。 $ yarn add vue-bus $ npm install vue-bus --save这是av vue-bus Vue.js的事件总线,同时...

    Node.js-Drekkar-用于在WebView和嵌入式JS之间发送消息的事件总线

    - **发布/发送**: 在JavaScript端,可以触发事件,这些事件会被传递到Drekkar的事件总线上,然后分发给所有注册的监听器。 - **数据传输**: 通过Drekkar,开发者可以方便地在JavaScript和原生代码之间传递JSON格式的...

    Vue事件总线插件用于侦听在线离线变化

    在Vue.js应用中,事件总线(Event Bus)是一种轻量级的通信方式,它允许组件之间进行非父子关系的通信。"Vue事件总线插件用于侦听在线/离线变化"这个主题,主要是讨论如何利用Vue事件总线机制来监听用户的网络状态...

    nx-event-bus:JavaScript中事件总线的简单实现

    NX事件总线 JavaScript的事件总线的简单实现。 它的主要功能是处理“死事件”。 “死事件”是指没有任何广播事件的侦听器。 如果发生此类事件,该事件将被保存,直到创建侦听器并将其重新广播为止;否则,此事件将被...

    Vue事件总线插件监听在线/离线更改-JavaScript开发

    vue-connection-listener Vue事件总线插件侦听在线/离线更改关于每当导航器的连接状态更改时,都会发出带有布尔有效载荷的“连接”事件,该负载指示新的st vue-connection-listener Vue事件总线插件侦听在线/离线...

    event-bus:简单事件总线

    活动巴士 适用于JavaScript应用程序的简单事件总线,无任何依赖关系,占用空间小。安装:Node.js: npm install --save eventing-busWebpack: yarn add eventing-bus或对于NPM: npm install --save eventing-bus...

    microfrontend-event-bus

    1. **创建事件总线实例**:首先,我们需要创建一个全局的事件总线对象,它通常是一个简单的JavaScript对象,带有`emit`(发布事件)和`on`(订阅事件)方法。 2. **事件订阅**:子应用在其初始化阶段订阅感兴趣的...

    javascript Vertx开发教程

    例如,你可以用以下方式在JavaScript中使用事件总线: ```javascript // 发布/订阅 vertx.eventBus.publish('news.channel', 'Breaking News!'); // 点对点 vertx.eventBus.send('worker.address', { task: '...

    CommandEventBridge:[已弃用] 用于在一个项目中组合命令总线和事件总线的桥接器

    在实际开发中,我们可能会选择使用现代的、维护更新的库或框架,如Redux(JavaScript)或MediatR(C#)来实现命令和事件处理。这些工具提供了更加成熟和灵活的解决方案,同时减少了代码中的潜在问题。 尽管...

    multi-page-event-bus:多页面事件总线

    多页面事件总线在Node.js的多页面应用中,用于各个页面之间通信的事件总线方案。背景在模块间业务耦合性不强的应用中,使用多页面架构可以有效的降低应用的复杂度。但是,有些页面上的逻辑比较复杂,需要切割到多个...

Global site tag (gtag.js) - Google Analytics