【问题标题】:Backbone.js: add event of a collection not firingBackbone.js:添加未触发的集合事件
【发布时间】:2011-11-16 12:06:31
【问题描述】:

我有一个标准的 Backbone.js 集合,定义如下:

class Observation extends Backbone.Model

class Observations extends Backbone.Collection
  model: Observation

然后我在集合的重置事件的事件处理程序中绑定这样的添加事件:

  collectionReset: (collection) =>
    @collection.bind 'add', @elementAdded

问题是事件没有被触发。我已经设置了一个断点并浏览了代码,它是以下行(backbone.js 0.5.3 的 627)阻止了 add 事件的触发:

_onModelEvent: function (ev, model, collection, options) {
  if ((ev == 'add' || ev == 'remove') && collection != this) return;

而且具体是下面的对比:

collection != this

集合参数与“this”引用不同。

以前有没有其他人看到过这种情况,或者他们能指出我做错了什么?

【问题讨论】:

  • 你在哪里打电话@collection.bind 'add', @elementAdded
  • 我已经更新了问题。我已经尝试在视图的初始化程序和上面概述的重置事件处理程序中添加绑定。
  • 您是否为回调设置了正确的范围?见:documentcloud.github.com/backbone/#FAQ-this
  • 我已经尝试添加额外的参数,但仍然没有雪茄。我已经用粗箭头语法声明了事件处理程序 elementAdded: (item) => 所以我认为无论如何都会被覆盖。
  • 抱歉,我不太熟悉 Coffeescript。比较失败时this 的值是多少?

标签: events backbone.js coffeescript


【解决方案1】:

您的代码中有几处可疑之处;您的 collectionReset 方法采用 collection 参数,但看起来您尝试使用 @collection 绑定它,这是不同的。如果你真的想在传递的参数“collection”上调用bind,你需要使用collection.bind,而不是@collection.bind

我主要将模型类(包括集合)中的事件绑定到视图,在这种情况下,您通常只需引用模型进行绑定,即调用@model.bind 'add', someMethod。从您定义Observations 的代码来看,您似乎应该尝试类似的方法。

【讨论】:

    猜你喜欢
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-16
    • 2014-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多