Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript bindAll()在主干视图中似乎不起作用_Javascript_Backbone.js_Underscore.js_Backbone Events_Backbone.js Collections - Fatal编程技术网

Javascript bindAll()在主干视图中似乎不起作用

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函数(此=触发时

我已查看侦听集合上的“添加”事件。当处理程序激发时,上下文就是集合,即使我使用了uz.bindAll()将其绑定到视图。这是一个bug,还是我不明白它是如何工作的

产出:

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);