js集合绑定了这种混淆
backbone.js collection bind this confusion
这是我的集合视图的一个例子:
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's变成了集合而不是视图,因此addOne将无法工作。
要解决这个问题,我必须这样做:
mod.collection.bind('reset', self.addAll, this);
但是我认为这就是__bindall的意义。这不应该把这个设为视图吗?这可以解释吗?是否有一种方法可以始终确保这指向视图而不是集合?
谢谢。
_.bindAll
必须出现在对该方法的任何引用之前。你搞反了。
_.bindAll(self, 'addOne', 'addAll');
mod.collection.bind('add', self.addOne);
mod.collection.bind('reset', self.addAll);
当你调用_.bindAll
时,它会将你指定的方法替换为一个已经包装/代理/装饰的方法,以确保上下文始终被正确设置。由于该方法正在被替换,因此您对该方法的任何引用都必须在替换发生之后进行。否则,参考文献将指向原始方法,_.bindAll
将看起来没有工作。
对于_.bindAll
和第三个参数…挑一个你喜欢的。我更喜欢在调用.bind
时传递第三个参数,但这只是我。有些情况下,我不得不使用_.bindAll
,虽然。它们都做同样的事情,它们只是做的方式不同。
相关文章:
- 主干.js绑定到集合“添加”呈现视图两次
- 将集合绑定到主干中的模型
- 具有深度嵌套集合的 Angular 性能和数据绑定
- Jquery/JavaScript 代码绑定到集合
- 可以't将集合绑定到视图
- 如何在不破坏角度数据绑定的情况下更新集合中的项
- 对集合使用getter时,ASP.NET MVC3模型绑定器数据无效
- Backbone.js-can't获取数据,或绑定到集合上的获取事件
- 将骨干模型和集合绑定到源图
- js集合绑定了这种混淆
- 在 fetch 的成功和集合对象的绑定事件中编写代码有什么区别
- ng-repeat绑定集合,使用选项卡过滤布尔值,当我更新集合时,过滤器不会重新应用
- 模型绑定编辑器模板中的嵌套集合
- 使用流星和Angular为单个文档提供3- way数据绑定,而不是集合
- Backbone.js集合方法绑定
- struts2形式绑定参数到集合而不使用索引
- 为什么我的MVC动作不是模型绑定我的集合
- 在保留绑定的同时连接集合
- 将tmpl绑定到jquery集合
- Backbone.js将更改事件绑定到模型内的集合