0

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

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

要遵循的步骤是:

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

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

如果有人能帮助我解决这个问题,我将不胜感激,这让我整天都陷入困境。

4

1 回答 1

1

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

var toRemove = this.model.get('time_constraints').filter(function (timeConstraint) {
    return timeConstraint.isNew();
});
this.model.get('time_constraints').remove(toRemove);
于 2012-11-01T22:03:19.550 回答