And*_*son 0 javascript backbone.js
我试图批量删除骨干模型的集合,如此...
collection.each(function(model, i){
model.destroy();
});
Run Code Online (Sandbox Code Playgroud)
我发现当每个循环包含model.destroy()时,它会在计数10后停止.如果我再次运行它,它会停止5.在3 ... 2 ..之后的时间然后是1.
如果我用console.log(i)替换model.destroy(),则循环运行集合的长度.
这是Backbone中的故意限制,以防止您在一次性删除1000条记录或浏览器限制相对同时DELETE方法的数量?
Is this an intentional limitation within Backbone to keep you from deleting 1000 records in one shot or a browser limitation on the number of relatively simultaneous DELETE methods?
没有.
问题是你在每次迭代时都要修改集合.考虑以下.
假设您从10个模型的集合开始:
// pretend this collection has 10 models [m0,m1,m2,m3,m4,m5,m6,m7,m8,m9]
collection.each(function(model,i) {
model.destroy();
});
Run Code Online (Sandbox Code Playgroud)
在你的第一次迭代中,你collection.length === 10和你的参数collection.each将是m0和0.所以你打电话,m0.destroy()它住在索引0.
在第一次迭代结束时,您collection包含以下模型
[m1,m2,m3,m4,m5,m6,m7,m8,m9]
Run Code Online (Sandbox Code Playgroud)
以下是问题的开始:
现在进行第二次迭代了collection.length === 9.该each函数现在进行了第二次迭代,并在索引为1时获取模型,这就是模型2所在的位置.所以论证each是m2,1.然后m2.destroy(),您可以从集合中调用并删除它.
在第二次迭代结束时,您的集合包含以下内容:
[m1,m3,m4,m5,m6,m7,m8,m9]
Run Code Online (Sandbox Code Playgroud)
第三次迭代,你的索引将是2 m4.destroy()并将被调用.离开你:
[m1,m3,m5,m6,m7,m8,m9].
Run Code Online (Sandbox Code Playgroud)
这种情况发生在索引大于collection.length然后停止之前.让您在收藏中留下不需要的模特.
以下内容对您有用:
while ( (model=collection.shift()) ) {
model.destroy()
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
488 次 |
| 最近记录: |