Javascript backbone.js集合绑定了这种混乱
以下是“我的收藏”视图的一个示例:Javascript backbone.js集合绑定了这种混乱,javascript,backbone.js,Javascript,Backbone.js,以下是“我的收藏”视图的一个示例: mod.AppListView = Backbone.View.extend({ initialize: function() { var self = this mod.collection.bind('add', self.addOne); mod.collection.bind('reset', self.addAll); _.bindAll(self, 'addOne', 'addAll'
mod.AppListView = Backbone.View.extend({
initialize: function() {
var self = this
mod.collection.bind('add', self.addOne);
mod.collection.bind('reset', self.addAll);
_.bindAll(self, 'addOne', 'addAll');
this.addAll();
},
events: {
},
addOne: function(myModel) {
var view = new ListItemView({
model: myModel
});
},
addAll: function() {
mod.collection.each(this.addOne);
},
});
在初次运行时,这工作正常。但在随后的重置addAll时,这将成为集合而不是视图,因此addOne无法工作
要解决此问题,我必须执行以下操作:
mod.collection.bind('reset', self.addAll, this);
但我认为这就是宾德尔的重点?这不应该把这个设置为视图吗?这可以解释吗?是否有一种方法可以始终确保这一点指向视图而不是集合
谢谢。
。.bindAll
必须在引用该方法之前。你把它倒过来了
_.bindAll(self, 'addOne', 'addAll');
mod.collection.bind('add', self.addOne);
mod.collection.bind('reset', self.addAll);
当您调用\uuu.bindAll
时,它会将您指定的方法替换为已包装/代理/修饰的方法,以确保始终正确设置上下文。由于该方法正在被替换,因此对该方法的任何引用都必须在替换发生后进行。否则,引用将指向原始方法,\uu.bindAll
将显示为不起作用
与第三个参数相比,
\uuu.bindAll
。。。挑一个你喜欢的。我更喜欢在调用.bind
时传入第三个参数,但那只是我自己。不过,在某些情况下,我必须使用\uu.bindAll
。它们都做相同的事情,只是用不同的方式来做而已。\uz.bindAll
必须在引用该方法之前。你把它倒过来了
_.bindAll(self, 'addOne', 'addAll');
mod.collection.bind('add', self.addOne);
mod.collection.bind('reset', self.addAll);
当您调用\uuu.bindAll
时,它会将您指定的方法替换为已包装/代理/修饰的方法,以确保始终正确设置上下文。由于该方法正在被替换,因此对该方法的任何引用都必须在替换发生后进行。否则,引用将指向原始方法,\uu.bindAll
将显示为不起作用
与第三个参数相比,\uuu.bindAll
。。。挑一个你喜欢的。我更喜欢在调用.bind
时传入第三个参数,但那只是我自己。不过,在某些情况下,我必须使用\uu.bindAll
。他们两人做同样的事情,只是用不同的方式