gpt4 book ai didi

javascript - backbone.js 集合绑定(bind)了这个困惑

转载 作者:行者123 更新时间:2023-11-30 09:01:48 26 4
gpt4 key购买 nike

这是我的 Collection View 的示例:

  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 的 this 变成了集合而不是 View ,因此 addOne 将不起作用。

要解决这个问题,我必须这样做:

mod.collection.bind('reset', self.addAll, this);

但我认为这就是 _.bindAll 的意义所在?不应该将 this 设置为 View 吗?这可以解释吗?有没有办法始终确保 this 指向 View 而不是集合?

谢谢。

最佳答案

_.bindAll 必须位于对该方法的任何引用之前。你把它倒过来了。

  _.bindAll(self, 'addOne', 'addAll');

mod.collection.bind('add', self.addOne);
mod.collection.bind('reset', self.addAll);

当您调用 _.bindAll 时,它会将您指定的方法替换为已包装/代理/修饰的方法,以确保始终正确设置上下文。由于正在替换该方法,因此您对该方法所做的任何引用都必须在替换发生后完成。否则引用将指向原始方法并且 _.bindAll 将看起来没有工作。

至于 _.bindAll 与第三个参数……选择你喜欢的那个。我更喜欢在调用 .bind 时传入第 3 个参数,但我就是这样。不过,有些情况下我必须使用 _.bindAll。他们都做同样的事情,只是方式不同。

关于javascript - backbone.js 集合绑定(bind)了这个困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8656047/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com