Backbone.js:uz.bindAll()在initialize中-为什么使用它?
我一直在看一些基于backbone.js的应用程序示例。我注意到,在某些情况下(如下面),使用了下划线函数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()的目的是什么?它有必
\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')