第一次写,写的不对的请指正
backbone.js中的Event实现了自定义事件。自定义事件就是一个对象的键值对,key为事件名,value为一个function数组。在backbone这个对象中有一个内置的对象_events保存着所有的事件
所有Events的方法都是通过eventsApi调用的。
eventsApi = function(iteratee, events, name, callback, opts){...}
分别传入offApi,onceMap,triggerApi作为eventsApi的第一个参数实现对性的off,once,trigger。其中on和listenTo则是通过internalOn方法调用的eventsApi,internalOn方法则是通过第五个参数来区分on和listenTo。internalOn方法的目的就是保护第五个参数,提高安全性。
这里有3个属性this._events={eventName:[]}和this._listeningTo={obj._listenId:{obj: obj, objId: id, id: thisId, listeningTo: listeningTo, count: 0}}和this._listeners={obj._listenId:{obj: obj, objId: id, id: thisId, listeningTo: listeningTo, count: 0}},这三个为map对象。Events这个类最终实现了对这3个对象的操作。
注:Events.listenTo = function(obj, name, callback){...}这个方法调用一次操作了this._events,this._listeningTo和obj._listeners三个属性