Events模块

一、关于on、trigger

(1)、on、trigger是观察者模式的实现。各观察者注册主题数据的监听,当主题数据发生变化时,各观察者执行自己的回调,处理业务逻辑。

(2)、on实现原理

示例:dataModel.on(‘dataChange‘, function(){});

on方法内部为dataModel创建对象属性_events,数据结构为 {eventType : [callbackFunList]} 为不同的类型的自定义事件维护一个回调函数列表。通过on方法将对应的回调push到对应的列表。

需要注意的是,on方法在将回调push到对应的列表时,并没有判断该回调函数的指针在列表中是否已经存在,示例:

以上的实力代码将会打印两次:repeat repeat repeat repeat!

(3)、trigger实现原理

示例:dataModel.trigger(‘dataChange‘, {columnId : 1});

访问dataModel的属性_events,根据事件类型(dataChange)取出回调函数列表,循环执行列表中的回调函数。通过数组保证执行顺序与绑定顺序的一致性。

最后我们看一下139邮箱云邮局我的报刊模块的模型层的_events对象:

(4)、once实现原理。通过once绑定的事件,执行一次后就被销毁。

Events模块

时间: 2024-12-14 10:04:43

Events模块的相关文章

Backbone事件管理——Backbone.Events模块API结构

模块Backbone.Events的事件管理是通过Backbone提供的Events API来实现的,该API在1.0版本之前仅仅提供了几个基本的方法,如on.off.trigger.once分别执行对事件的绑定.解除绑定.执行事件.执行一次事件的操作.从1.0版本以后,又添加了几个实用方法,如listenTo.listenToOnce.stopListening,分别执行添加一个事件的侦察对象.添加一个仅执行一次的事件侦察对象和移除已添加的事件侦察对象,其完整的结构如图3-1所示. Backb

node的events模块

events可以说是node实现异步的基石,也是其他几个常用核心模块api的异步方法的原型. 1 var eventEmitter=require('events').EventEmitter; 2 //var eventEmitter=require('events'); 这样写也可以 3 var myEvent=new eventEmitter(); 4 myEvent.on('shout',function(){console.log('Oh')}) 5 myEvent.emit('sho

Backbone.js中的Events模块使用

本文先从项目组现有对Backbone.js中的Events模块的使用进行分析,然后列举了对Events模块的扩展使用. Events哈希 Backbone的events哈希允许我们为el相关的自定义选择器或者直接为el本身(没有选择符的情况)提供事件监听器.事件采用的是‘evnetName selector’: 'callbackFunction'这样的形式,并且支持大量的事件类型,包括click.mouseover.dblclick.blur等,但还是有些事件类型是不支持的,例如:hover事

node模块之events模块

events 模块只提供了一个对象: events.EventEmitter. [EventEmitter 的核心就是事件触发与事件监听器功能的封装.] EventEmitter 的每个事件由一个事件名和若干个参 数组成,事件名是一个字符串,通常表达一定的语义.对于每个事件,EventEmitter 支持 若干个事件监听器.当事件触发时,注册到这个事件的事件监听器被依次调用,事件参数作 为回调函数参数传递. 例子: var events = require('events'); var emit

nodejs events模块

var EventEmitter = require('events').EventEmitter; var emitter = new EventEmitter(); console.log(emitter.getMaxListeners()); //设置可监听事件的最大个数 emitter.setMaxListeners(11); function work(who){ console.log(who + ' go to work') } //监听事件 emitter.on('do', wo

澳门赌博攻略,整体说来Backbone的events模块还是很不错的

我们是通过判断请求的路径来直接返回结果的.简单粗暴,缺点明显:如果url后面加杂了queryString,因为判断逻辑中没有处理,那么将直接返回404页面(其实也没有其他的页面). 难道要一个一个加queryString的处理?有可行性,但麻烦. 再者,如果要添加新的html页面,那么也要在处理逻辑中依次添加?html页面还要引用js脚本,css样式,样式表中还要引用图片,字体....难道就要这样无休止的添加下去?显然是不可能的. 借助于NodeJS提供的urlAPI,我们可以提取请求url中的

使用原生代码实现一个Events模块,可以实现自定义事件的订阅、触发、移除功能

function Events() { // 放置所有添加的 监听事件 this._events = {} } Events.prototype = { on: function (name, fn, ...argOrg) { // 必传参数验证 if (!name || !fn) { throw new Error(`[Events TypeError] Failed to execute 'Events' on '${name}' : 2 arguments required`) retur

[NodeJS]核心模块--Events

Events是Node中的一个很重要的核心模块,Stream, 网络,文件系统统统都是继承自这个模块. Streams模块就是继承自EventEmitter,所以说弄明白Events模块,特别是EventEmitter对象, 对于理解Node中的很多模块都是有好处的. Stream非常擅长处理数据,无论是读,写或者是转换.比如,你可以用Stream接收数据库中的数据,将其流出到csv的流中,导出成为csv格式. 接着你可以再传入一个http请求(也是一种流)将数据再流入到http流中,这样就可以

nodeJS之事件events

前面的话 events模块是node的核心模块,几乎所有常用的node模块都继承了events模块,比如http.fs等.本文将详细介绍nodeJS中的事件机制 EventEmitter 多数 Node.js 核心 API 都是采用惯用的异步事件驱动架构,其中某些类型的对象(称为触发器)会周期性地触发命名事件来调用函数对象(监听器).例如,一个net.Server对象会在每次有新连接时触发一个事件:一个 fs.ReadStream 会在文件被打开时触发一个事件:一个 stream会在数据可读时触