在主干todo demo中,代码中有一些使用_.bindAll(this,...)
的位置。具体来说,它用于两个视图的initialize
函数。据我所知,有必要做以下事情:
this.$('.todo-content').text(content);
但是,当人们可以做的时候,为什么要做上述事情:
$('.todo-content').text(content);
答案 0 :(得分:93)
_.bindAll( this, ... )
不仅对this.$( selector ).doSomething()
是必要的,而且通常要确保视图方法中的this
始终指向视图本身。
例如,如果我们想在模型更改时刷新视图,我们会将视图的render
方法绑定到模型的change
事件:
initialize: function() {
this.model.bind( 'change', this.render );
},
如果没有_.bindAll( this, 'render' )
,this
中的模型更改render
将指向模型,而不是视图,因此我们不会this.el
或this.$
或任何其他视图的属性都不可用。
答案 1 :(得分:59)
从Backbone 0.5.2开始,不再需要在视图中使用_.bindAll(this ...)来设置“bind”回调函数的上下文,因为您现在可以将第3个参数传递给bind ()将设置回调的上下文(即“this”)。
例如:
var MyView = Backbone.View.extend({
initialize: function(){
this.model.bind('change', this.render, this);
},
render: function(){
// "this" is correctly set to the instance of MyView
}
});
答案 2 :(得分:36)
this.$
将jQuery的上下文限制为视图的元素,因此操作更快。
另外,this.$('.todo-item')
将无法在您的视图元素之外找到todo-item
类的元素。