Javascript bindAll()在主干视图中似乎不起作用
我已查看侦听集合上的“添加”事件。当处理程序激发时,上下文就是集合,即使我使用了uz.bindAll()将其绑定到视图。这是一个bug,还是我不明白它是如何工作的 产出:Javascript bindAll()在主干视图中似乎不起作用,javascript,backbone.js,underscore.js,backbone-events,backbone.js-collections,Javascript,Backbone.js,Underscore.js,Backbone Events,Backbone.js Collections,我已查看侦听集合上的“添加”事件。当处理程序激发时,上下文就是集合,即使我使用了uz.bindAll()将其绑定到视图。这是一个bug,还是我不明白它是如何工作的 产出: e.Collection {length: 1, models: Array[1], _byId: Object, _events: Object, on: function…} 你的问题是当你调用this.collection.on('add',this.onAdd')首先,事件绑定到没有上下文的onAdd函数(此=触发时
e.Collection {length: 1, models: Array[1], _byId: Object, _events: Object, on: function…}
你的问题是当你调用this.collection.on('add',this.onAdd')首先,事件绑定到没有上下文的
onAdd
函数(此=触发时的集合)并调用\uuuuuuu0.bindAll(此为“onAdd”)代码>不会覆盖它
尝试更改顺序:
_.bindAll(this, 'onAdd');
this.collection.on('add', this.onAdd);
将bindAll方法放在binding to collection语句之前
这应该起作用:
V = Backbone.View.extend({
initialize: function (options) {
_.bindAll(this, 'onAdd');
this.collection.on('add', this.onAdd);
},
onAdd: function () { console.log(this); }
}))
更新:
通过在.on()方法中应用上下文,可以不使用u.bindAll方法
这是正确的.bindAll
正在用一个新函数替换onAdd
,当您在调用它之前传递this.onAdd
时,您传递的是对旧的未绑定版本的引用。另外,更好的解决方案是只在on声明上传递上下文。i、 e,this.collection.on('add',this.onAdd,this)代码>
V = Backbone.View.extend({
initialize: function (options) {
_.bindAll(this, 'onAdd');
this.collection.on('add', this.onAdd);
},
onAdd: function () { console.log(this); }
this.collection.on('add', this.onAdd, this);