Backbone.js:uz.bindAll()在initialize中-为什么使用它?

Backbone.js:uz.bindAll()在initialize中-为什么使用它?,backbone.js,Backbone.js,我一直在看一些基于backbone.js的应用程序示例。我注意到,在某些情况下(如下面),使用了下划线函数\uu.bindAll(): initialize: function (args) { _.bindAll(this, 'changeTitle'); this.model.bind('change:title', this.changeTitle); }, 而在其他情况下(如以下),则不: 在此上下文中,.bindAll()的目的是什么?它有必

我一直在看一些基于backbone.js的应用程序示例。我注意到,在某些情况下(如下面),使用了下划线函数
\uu.bindAll()

 initialize: function (args) {
        _.bindAll(this, 'changeTitle');
        this.model.bind('change:title', this.changeTitle);
    },
而在其他情况下(如以下),则不:

在此上下文中,
.bindAll()
的目的是什么?它有必要吗?

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

In Detail: _.bind(ctx, 'method')
采用您的方法,创建一个上下文绑定到“ctx”的副本,并将副本添加为属性

这是不允许在上下文中传递的
jQuery.bind()
的解决方法。 JQ将始终使用未定义的上下文调用回调。主干是建立在jQuery上的


请参见此处:

使用
.bindAll
是一种糟糕的做法,因为如果您删除方法并忘记编辑
.bindAll
所有内容都将崩溃,有时您还需要与binded不同的范围,但在主干0.3.x中,您无法在事件绑定中设置上下文,因此使用
.bindAll
是错误的popular@ant_Ti“很受欢迎”你是说当>0.3.x时,我们不再需要这样做了?我觉得是这样的,所以要确定一下。谢谢@ant_Ti仅仅因为它在您不正确地使用它时崩溃,并不意味着它是一种不好的做法。这使它成为一个友好的函数,当您错误地使用它时,它会抛出错误。正如@sciyoshi在下面给出的答案所说,它允许您更容易地引用
这个
。@nackjicholson易支持性和可重用性优于易用性。
..bindAll
有很多陷阱。
In Detail: _.bind(ctx, 'method')