Backbone.js“on”函数中context(last参数)的默认值是什么?

时间:2012-12-21 18:41:19

标签: backbone.js

我永远无法弄清楚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作为上下文参数?

1 个答案:

答案 0 :(得分:5)

如果查看on source,您会看到默认context的内容:

on: function(name, callback, context) {
  //...
  events.push({callback: callback, context: context, ctx: context || this});
  //...
},

因此,默认context是调用的任何对象onctx: context || this。所以如果你只是说:

model.on('event', this.callback);

this被调用时,model将在callbackthis。如果您希望// Inside a view... model.on('event', this.callback, this); 成为视图,那么您可以这样说:

callback

或者使用_.bind_.bindAllFunction#bind$.proxy等使context成为约束函数。

为什么要指定this?好吧,在作为视图方法的回调中,您可能希望on成为视图,on无法知道在您调用this时视图是什么:你不能展开堆栈以找出x在调用链的某个地方,即使你可以,也不知道在哪里停止。因此,使用x.on(...)中的{{1}}是唯一合理的默认值,如果您想要其他内容,则可以轻松说出来。