将事件复制到新实例

时间:2013-05-31 22:18:10

标签: backbone.js backbone-events

我有Task的集合。我在集合声明中添加了一些过滤器方法,以在新实例中返回集合的子集。我想要做的是在原始集合中创建一个模型,并将add(和任何其他)事件过滤到Tasks集合的任何新实例,以便我的视图部分可以相应地更新。 / p>

Here is a JSBin demonstrating my problem。请注意,当我在最后一行向原始集合添加新模型时,列表不会更新,因为显然,过滤器方法返回该集合的新实例(这对我来说似乎很干净),因此不会触发任何侦听器 - 视图使用不同的集合到已添加项目的集合。

如何以语义和干净的方式过滤集合,但是保持绑定到集合的任何事件在返回的模型子集上被过滤?

例如,以下代码未触发add的{​​{1}}事件(notAsManyTasks从未显示):

alert()

如何解决这个问题?理想情况下,我不想存储集合的原始状态,返回子集,然后再次恢复所有模型。

1 个答案:

答案 0 :(得分:1)

如果不做一些复杂的事情,你应该能够沿着这些方向做点什么:

mySubset.listenTo(myCollection, 'all', function() {
  this.trigger.apply(this, arguments);
});

您可以收听集合中的所有事件,并使用您的子集回显它们。虽然我猜这只是解决方案的一半,因为您的子集不会更新,您可以在监听器中为所有子集执行过滤。
另一个只能执行一次工作的解决方案是让您的集合听取自己的add事件,过滤新模型,并触发自定义事件,以便只有实际需要的子集才能做点什么。