javascript - bindAll() 似乎不适用于 Backbone View

标签 javascript backbone.js underscore.js backbone-events backbone.js-collections

我让 View 监听集合上的“添加”事件。当处理程序触发时,上下文是 Collection,即使我使用 _.bindAll() 将其绑定(bind)到 View。这是一个错误,还是我不明白这是如何工作的? jsfiddle

V = Backbone.View.extend({
    initialize: function (options) {
        this.collection.on('add', this.onAdd);
        _.bindAll(this, 'onAdd');
    },
    onAdd: function () { console.log(this); }
});
c = new Backbone.Collection();
v = new V({collection:c});
c.add(new Backbone.Model());

输出:

e.Collection {length: 1, models: Array[1], _byId: Object, _events: Object, on: function…}

最佳答案

将bindAll方法放在绑定(bind)到集合语句之前 这应该有效:

V = Backbone.View.extend({
initialize: function (options) {
    _.bindAll(this, 'onAdd');
    this.collection.on('add', this.onAdd);

},
onAdd: function () { console.log(this); }

});

更新: 通过在 .on() 方法中应用上下文,可以不使用 _.bindAll 方法

this.collection.on('add', this.onAdd, this);

关于javascript - bindAll() 似乎不适用于 Backbone View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22159292/

相关文章:

JavaScript 错误 : "is not a constructor"

javascript - 有没有办法(使用 Lodash 或 Underscore)来查看字符串数组中的字符串是否包含另一个数组中的子字符串?

javascript - 动态生成条件JS

javascript - electro-vue ~ 无法使用 RxJS 订阅更新 vuex 状态

javascript - 无法获取图像高度,改为获取naturalHeight

javascript - Junior Mobile FW - 从 html 加载 View

javascript - 使用 Underscorejs 从 json 中提取值

javascript - 如何检查手机是否至少使用过一次Google map

javascript - 从 Backbone.js 中的集合获取构建模型

javascript - 如何通过集合中的数组参数获取模型