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

Tol*_*oli 2 backbone.js

我永远无法弄清楚backbone.js .on()函数中的第3个参数是什么(应该是上下文):

this.model.on('change', this.doStuff, context); 
Run Code Online (Sandbox Code Playgroud)

根据:Backbone.js on(),这最后引用的是什么?似乎它设置了this内部的值可以有人给出一个上下文的例子.我通常在on没有上下文的情况下使用它似乎引用了视图this,但偶尔会引用其他东西(我无法弄清楚).

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

mu *_*ort 5

如果您查看on源代码,您将看到默认context值:

on: function(name, callback, context) {
  //...
  events.push({callback: callback, context: context, ctx: context || this});
  //...
},
Run Code Online (Sandbox Code Playgroud)

所以默认context是on调用的对象:ctx: context || this.所以如果你只是说:

model.on('event', this.callback);
Run Code Online (Sandbox Code Playgroud)

然后this将model里面callback当它被调用.如果你想this成为观点,那么你这样说:

// Inside a view...
model.on('event', this.callback, this);
Run Code Online (Sandbox Code Playgroud)

或者你让callback使用绑定功能_.bind,_.bindAll,Function#bind,$.proxy,等.

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