一、关于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绑定的事件,执行一次后就被销毁。