事件模式是界面层主要模式,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
分享到:
相关推荐
JavaScript 事件总线,如 `verkehrjs`,是一种轻量级的设计模式,用于在复杂的JavaScript应用程序中实现组件之间的通信。在大型应用中,不同模块之间的数据传递和事件监听经常成为一个挑战,事件总线可以有效地解决...
在Android应用开发中,事件总线(Event Bus)是一种设计模式,用于简化组件之间的通信,它替代了传统的回调或显式接口调用。本教程将详细讲解Node.js中的EventBus、Otto以及RxBus这三种事件总线的使用方法。 首先,让...
然而,这里提到的是在 Node.js 环境下使用事件总线框架进行事件驱动编程,这可能涉及到自定义实现或使用特定的库,如 `eventemitter3` 或 `busboy`。 在 Node.js 中,内置的 `events` 模块提供了 EventEmitter 类,...
1. **事件(Event)**:事件是事件总线中的基本单元,通常是一个包含特定数据的对象,用于传递信息。 2. **发布者(Publisher)**:发布者是触发事件的组件,它通过调用事件总线的`emit`方法来发布事件。 3. **订阅...
Vue.js的事件总线(Event Bus)是一种轻量级的通信机制,用于在不相关的组件之间传递信息。在大型Vue项目中,当组件之间没有直接的父子关系或祖孙关系时,事件总线提供了一种灵活的方式来解耦组件。本文将深入探讨...
介绍Vue组件之间的通信方式,本资源主要是介绍中央事件总线这种模式,代码中详细示范了如何使用中央事件总线来通信
至于“工具”,可能是指存在一些现成的事件总线库,如JavaScript的EventBus、发布/订阅库(如RxJS)等,这些工具可以帮助开发者快速地实现事件驱动的架构。 在压缩包中的“com”文件可能包含了事件总线的实现代码,...
一个很小的,快速的,零依赖JavaScript事件总线。 描述 压缩后少于500个字节+已压缩 零依赖 现代语法 快速地 简单的 已输入 安装 只需下载index.js,或使用以下选项之一: yarn add @mxttwoods/eventbus 或者 npm...
一个很小的,快速的,零依赖JavaScript事件总线。 描述 压缩后少于500个字节+已压缩 零依赖 现代语法 快速地 简单的 已输入 安装 只需下载index.js,或使用以下选项之一: yarn add @mxttwoods/pubsub 或者 yarn ...
用于 JavaScript 的最小事件总线又名消息调度程序。 基本示例 > var bus = Minibus.create() > var route = bus.on('out-of-fuel', function () { console.log('Hitchhike.') }); > bus.emit('out-of-fuel') ...
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的事件总线,同时...
- **发布/发送**: 在JavaScript端,可以触发事件,这些事件会被传递到Drekkar的事件总线上,然后分发给所有注册的监听器。 - **数据传输**: 通过Drekkar,开发者可以方便地在JavaScript和原生代码之间传递JSON格式的...
在Vue.js应用中,事件总线(Event Bus)是一种轻量级的通信方式,它允许组件之间进行非父子关系的通信。"Vue事件总线插件用于侦听在线/离线变化"这个主题,主要是讨论如何利用Vue事件总线机制来监听用户的网络状态...
NX事件总线 JavaScript的事件总线的简单实现。 它的主要功能是处理“死事件”。 “死事件”是指没有任何广播事件的侦听器。 如果发生此类事件,该事件将被保存,直到创建侦听器并将其重新广播为止;否则,此事件将被...
vue-connection-listener Vue事件总线插件侦听在线/离线更改关于每当导航器的连接状态更改时,都会发出带有布尔有效载荷的“连接”事件,该负载指示新的st vue-connection-listener Vue事件总线插件侦听在线/离线...
活动巴士 适用于JavaScript应用程序的简单事件总线,无任何依赖关系,占用空间小。安装:Node.js: npm install --save eventing-busWebpack: yarn add eventing-bus或对于NPM: npm install --save eventing-bus...
1. **创建事件总线实例**:首先,我们需要创建一个全局的事件总线对象,它通常是一个简单的JavaScript对象,带有`emit`(发布事件)和`on`(订阅事件)方法。 2. **事件订阅**:子应用在其初始化阶段订阅感兴趣的...
例如,你可以用以下方式在JavaScript中使用事件总线: ```javascript // 发布/订阅 vertx.eventBus.publish('news.channel', 'Breaking News!'); // 点对点 vertx.eventBus.send('worker.address', { task: '...
在实际开发中,我们可能会选择使用现代的、维护更新的库或框架,如Redux(JavaScript)或MediatR(C#)来实现命令和事件处理。这些工具提供了更加成熟和灵活的解决方案,同时减少了代码中的潜在问题。 尽管...
多页面事件总线在Node.js的多页面应用中,用于各个页面之间通信的事件总线方案。背景在模块间业务耦合性不强的应用中,使用多页面架构可以有效的降低应用的复杂度。但是,有些页面上的逻辑比较复杂,需要切割到多个...