为什么bindAll会出现在backbone.js视图中?
在主干网中,代码有几个地方使用为什么bindAll会出现在backbone.js视图中?,backbone.js,underscore.js,Backbone.js,Underscore.js,在主干网中,代码有几个地方使用.bindAll(这个,…)。具体来说,它用于两个视图的初始化功能。据我所知,有必要执行以下操作: this.$('.todo-content').text(content); 但是,当人们能够做到的时候,为什么要做上述事情呢 $('.todo-content').text(content); ?此。$将jQuery的上下文限制为视图的元素,因此操作更快 另外,this.$('.todo item')将找不到视图元素外部具有todo item类的元素。..bin
.bindAll(这个,…)
。具体来说,它用于两个视图的初始化功能。据我所知,有必要执行以下操作:
this.$('.todo-content').text(content);
但是,当人们能够做到的时候,为什么要做上述事情呢
$('.todo-content').text(content);
?此。$
将jQuery的上下文限制为视图的元素,因此操作更快
另外,this.$('.todo item')
将找不到视图元素外部具有todo item
类的元素。..bindAll(this,…)
不仅对于this.$(选择器).doSomething()是必需的
但通常要确保视图方法中的始终指向视图本身
例如,如果我们想在模型更改时刷新视图,我们将视图的render
方法绑定到模型的change
事件:
initialize: function() {
this.model.bind( 'change', this.render );
},
如果没有.bindAll(这个,'render')
,当模型更改时,render
中的这个将指向模型,而不是视图,因此我们既没有这个.el
也没有这个。$
或任何其他视图的属性可用。从主干0.5.2开始,不再需要使用.bindAll(this…)设置“bind”回调函数的上下文,因为现在可以将第三个参数传递给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
}
});
“this.model.bind('change',this.render,this)”一行只会让我头晕目眩。试试coffeescript及其=>操作符。注意this.bind
(或this.model.bind
)做一件与\uuu.bind
完全不同的事情。我花了一段时间才意识到。@JonatanLittke right,主干绑定是“on”的别名。不建议这样做-更建议使用this.listenTo(this.model,'change:id',this.render);因为当您破坏视图时,侦听器将被删除