当使用Backbone集合的each
方法时,我目前遇到了非常不寻常的行为。在我的应用程序中,我允许用户编辑现有模型,包括编辑和向该模型添加一些时间限制。模型及其时间约束与Backbone Relational相关联。每次用户单击以添加新的时间约束时,我都会在关系中添加TimeConstraint模型而不保存它。如果用户随后决定取消编辑,则应从关系中删除所有新的/未保存的TimeConstraints。但是,当我循环遍历我的集合时,它似乎没有执行最后的迭代。
我构建了一个jsfiddle来演示这种行为:http://jsfiddle.net/richardstokes/ZzFgZ/9/
要遵循的步骤是:
您会注意到控制台会打印time_constraints集合的起始长度和完成长度,以及删除未保存模型后的中间长度。它似乎总是停下来,并在集合中留下一个项目,即使它们都是新的/未保存的。
如果有人能帮我解决这个问题,我会非常感激,这让我整天陷入困境。
答案 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);