2

我永远无法真正弄清楚backbone.js.on()函数中的第三个参数是做什么的(假设是上下文):

this.model.on('change', this.doStuff, context); 

根据:Backbone.js on(),最后this指的是什么?似乎它设置了this里面的值,有人可以举个例子说明上下文应该是什么。我通常on在没有上下文的情况下使用,它似乎引用了 view this,但有时它引用了其他东西(我无法弄清楚)。

那么Backbonecontext默认设置的逻辑是什么?你什么时候不想this引用视图?有没有办法让它总是引用视图而不指定this为上下文参数?

4

1 回答 1

5

如果您查看on源代码,您会看到默认值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里面。callback如果您想this成为视图,那么您可以这样说:

// Inside a view...
model.on('event', this.callback, this);

或者您callback使用_.bind, _.bindAll, Function#bind,$.proxy等创建绑定函数。

为什么要指定一个context?好吧,在作为视图方法的回调中,您可能希望this成为视图,并且on在调用时无法知道视图是什么on:您无法展开堆栈以找出this某处的内容调用链,即使你可以,你也不知道在哪里停下来。所以使用xinx.on(...)是唯一合理的默认值,如果你想要别的东西,你可以很容易地说出来。

于 2012-12-21T19:13:22.153 回答