我永远无法弄清楚backbone.js的.on()
函数中的第3个参数是什么(应该是上下文):
this.model.on('change', this.doStuff, context);
根据:Backbone.js on(), what does the last this refer to?似乎它设置了this
的值
有人可以举一个上下文的例子。我通常在没有上下文的情况下使用on
,它似乎引用了视图this
,但偶尔会引用其他内容(我无法弄清楚)。
那么Backbone默认设置context
的逻辑是什么?什么时候你想要this
不要参考视图?有没有办法让它始终引用视图而不指定this
作为上下文参数?
答案 0 :(得分:5)
如果查看on
source,您会看到默认context
的内容:
on: function(name, callback, context) {
//...
events.push({callback: callback, context: context, ctx: context || this});
//...
},
因此,默认context
是调用的任何对象on
:ctx: context || this
。所以如果你只是说:
model.on('event', this.callback);
当this
被调用时,model
将在callback
内this
。如果您希望// Inside a view...
model.on('event', this.callback, this);
成为视图,那么您可以这样说:
callback
或者使用_.bind
,_.bindAll
,Function#bind
,$.proxy
等使context
成为约束函数。
为什么要指定this
?好吧,在作为视图方法的回调中,您可能希望on
成为视图,on
无法知道在您调用this
时视图是什么:你不能展开堆栈以找出x
在调用链的某个地方,即使你可以,也不知道在哪里停止。因此,使用x.on(...)
中的{{1}}是唯一合理的默认值,如果您想要其他内容,则可以轻松说出来。