我刚开始使用backbone.js,我添加了一些基本方法来扩展一个集合,允许我遍历一个集合并保存所有模型,并遍历集合到销毁所有型号。我意识到批量更新不是RESTful,但我只是更新到本地存储,所以不认为这会是一个问题做多个更新。this.each不通过集合正确迭代
在我的基本应用程序中,该集合有9个模型。 当我调用collection.saveModels()时,它正确记录集合的长度,并正确保存所有模型。
当我调用collection.deleteModels()时,它正确地记录集合的长度,但会跳过每个第二个模型(即第2,4,6,8个)。每次按下删除键时,它将继续只删除奇怪的索引元素,最后一个要删除的项目是第8个原始项目。
是否有可能我错误地使用了每个功能,尽管保存时它可以正常工作?
_.extend(Backbone.Collection.prototype, Backbone.Events, {
saveModels : function() {
console.log(this.length);
this.each(function(model){
console.log('saving model ' + model.get('name'));
model.save();
});
},
deleteModels : function() {
console.log(this.length);
this.each(function(model){
console.log('deleting model ' + model.get('name'));
model.destroy();
});
}
});
,他们被称为像这样:mycollection.saveModels();
和mycollection.deleteModels();
我知道我可以通过基于长度集合迭代,但如果可能的话,我宁愿使用内置的方法。
的主要问题,在一般情况下,在循环中删除的事情是,它搅乱了那里,循环目前是 - 环的长度被缩短,之后的“下一个”项指数实际上指的是项目下一个 - 例如,如果你删除第一个项目,循环的下一个索引将是第二个项目,但是第二个项目现在是第一个 - 所以第三个项目现在是第二个 - 希望是有意义的 – kinakuta
啊,就是这样。甚至没有想过这个! – djlumley
似乎你需要循环使用长度,但在任何情况下向后循环 – mplungjan