Backbone.Collection.each - 非常奇怪的行为

时间:2012-11-01 18:04:12

标签: backbone.js backbone-relational

当使用Backbone集合的each方法时,我目前遇到了非常不寻常的行为。在我的应用程序中,我允许用户编辑现有模型,包括编辑和向该模型添加一些时间限制。模型及其时间约束与Backbone Relational相关联。每次用户单击以添加新的时间约束时,我都会在关系中添加TimeConstraint模型而不保存它。如果用户随后决定取消编辑,则应从关系中删除所有新的/未保存的TimeConstraints。但是,当我循环遍历我的集合时,它似乎没有执行最后的迭代。

我构建了一个jsfiddle来演示这种行为:http://jsfiddle.net/richardstokes/ZzFgZ/9/

要遵循的步骤是:

  1. 点击“修改政策”
  2. 使用“新时间约束”按钮
  3. 添加2个或更多新时间约束
  4. 点击“取消编辑”
  5. 取消修改

    您会注意到控制台会打印time_constraints集合的起始长度和完成长度,以及删除未保存模型后的中间长度。它似乎总是停下来,并在集合中留下一个项目,即使它们都是新的/未保存的。

    如果有人能帮我解决这个问题,我会非常感激,这让我整天陷入困境。

1 个答案:

答案 0 :(得分:1)

您正在迭代timeConstraints的集合时删除项目,这可能会导致未定义的行为。首先尝试获取新的timeConstraints列表,然后将它们作为数组传递给remove():

var toRemove = this.model.get('time_constraints').filter(function (timeConstraint) {
    return timeConstraint.isNew();
});
this.model.get('time_constraints').remove(toRemove);