Backbone.js:初始化中的_.bindAll() - 为什么要使用它?

时间:2011-09-09 19:42:40

标签: backbone.js

我一直在研究基于backbone.js的应用程序的一些示例。我注意到在某些(例如下面的this example)中使用了下划线函数_.bindAll()

 initialize: function (args) {
        _.bindAll(this, 'changeTitle');
        this.model.bind('change:title', this.changeTitle);
    },

而在其他情况下(例如下面的todo app)请勿:

initialize: function() {
  this.model.bind('change', this.render, this);
  this.model.bind('destroy', this.remove, this);
},

_.bindAll()在这种情况下的目的是什么,是否有必要?

2 个答案:

答案 0 :(得分:26)

_.bindAll()在命名函数中更改this以始终指向该对象,以便您可以使用this.model.bind()。请注意,在第二个示例中,第三个参数传递给bind();这就是为什么在这种情况下不需要使用_.bindAll()。一般来说,最好使用模型上的任何方法作为事件的回调,以便您可以更轻松地引用this

答案 1 :(得分:3)

In Detail: _.bind(ctx, 'method')

采用您的方法,使用绑定到'ctx'的上下文创建副本,并将副本添加为属性。

这是jQuery.bind()不允许您传入上下文的变通方法。 JQ将始终使用未定义的上下文调用回调。 Backbone建立在jQuery之上。

见这里:http://backbonejs.org/#FAQ-this