Backbone的 listenTo 和 on
使用情景区别
listenTo用于监听自身意外的对象
on用于监听自身
listenTo和on中的回调函数里的this的区别
listener.listenTo(object, 'eventName', function(){ //此处的this指向listener }) object.on('eventName', function(){ //此处的this指向object }) object.on('eventName', function(){ //此处的this指向context }, context)
触发顺序
当存在同名事件时,会按定义顺序执行,on和listenTo定义的事件会处在同一队列中
若监听了all事件,则触发任意事件都将会在执行完相应回调后执行all事件的回调, all事件的监听会传递一个参数,该参数为事件名字
demo
1 var a = {type: "I'm listening"}, b = {type: "I'm listened"}; 2 _.extend(a, Backbone.Events); 3 _.extend(b, Backbone.Events); 4 b.on('onNoContext', function(){ 5 console.log('trigger onNoContext'); 6 console.log(this.type); 7 }); 8 b.on('onContext', function(){ 9 console.log('trigger onContext'); 10 console.log(this.type); 11 }, a); 12 a.listenTo(b, 'listened', function(){ 13 console.log('trigger listened'); 14 console.log(this.type); 15 }); 16 b.on('all', function(){ 17 console.log('trigger on all'); 18 }); 19 a.listenTo(b,'all', function(){ 20 console.log('trigger listen all'); 21 }); 22 23 console.log('###b.trigger("all")###'); 24 b.trigger('all'); 25 console.log('###b.trigger("onNoContext")###'); 26 b.trigger('onNoContext'); 27 console.log('###b.trigger("onContext")###'); 28 b.trigger('onContext'); 29 console.log('###b.trigger("listened")###'); 30 b.trigger('listened');
运行结果:
1 ###b.trigger("all")###
2 trigger on all
3 trigger listen all
4 trigger on all
5 trigger listen all
6 ###b.trigger("onNoContext")###
7 trigger onNoContext
8 I'm listened
9 trigger on all
10 trigger listen all
11 ###b.trigger("onContext")###
12 trigger onContext
13 I'm listening
14 trigger on all
15 trigger listen all
16 ###b.trigger("listened")###
17 trigger listened
18 I'm listening
19 trigger on all
20 trigger listen all

浙公网安备 33010602011771号