骨干模型.destroy()有限
Backbone model.destroy() limited
我正试图批量删除一组骨干模型,比如…
collection.each(function(model, i){
model.destroy();
});
我发现,当每个循环包含model.dedestroy()时,它在计数10后停止。如果我再次运行它,它将停止5。3.2.然后1。
如果我用console.log(I)替换model.dedestroy(),那么循环将运行集合的长度。
这是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();
});
在第一次迭代中,collection.length === 10
和collection.each
的参数将是m0
和0
。所以你调用m0.destroy()
,它位于索引0。
在第一次迭代结束时,collection
包含以下型号
[m1,m2,m3,m4,m5,m6,m7,m8,m9]
以下是问题的开始:
现在开始第二次迭代collection.length === 9
。each
函数现在正在进行第二次迭代,并获取索引为1的模型,这就是模型2所在的位置。所以each
的自变量是m2,1
。然后调用m2.destroy()
并将其从集合中删除。
在第二次迭代结束时,您的集合包含以下内容:
[m1,m3,m4,m5,m6,m7,m8,m9]
在第三次迭代中,您的索引将为2,并且将调用m4.destroy()
。留给你的是:
[m1,m3,m5,m6,m7,m8,m9].
这种情况一直持续到索引大于collection.length
,然后停止。在你的收藏中留下不想要的模型。
以下内容应该适用于您:
while ( (model=collection.shift()) ) {
model.destroy()
}
同意前面的答案,不允许这样做。
很快,在这种情况下我会怎么做:
collection.map(function (model) {
return model.id;
}).each(function (id) {
collection.get(id).destroy();
});
您是否尝试使用Backbone.Collection.remove
首先从集合中删除模型?我认为调用model.destroy()
是在破坏集合处理的内部模型数组。
这样试试:
collection.each(function(model, i) {
collection.remove(model);
model.destroy();
});
- 用有限的字符集压缩字符串,然后在JS中解压缩
- Rails——处理多态关联上的Ajax destroy调用
- 谷歌地图有限的区域不工作
- 是Google自定义搜索API的客户端请求数量有限
- 在下拉列表上调用“destroy”在jQuery 2.1.3中不起作用
- 创建包含有限元素的列表
- 如何将 gmap 搜索自动完成功能限制为有限的国家/地区
- 我可以发布谷歌分析数据的有限子集吗
- CKEDITOR destroy
- 在有限的时间内暂时禁用元素/图像的实时点击
- 组合复选框以激活文本字段和有限数量的允许复选框
- 将变量的极限值限制为一组有限的字符串
- 通过Javascript对特定日期格式的有限输入
- 捕捉.svg有限的视口
- 页面工作线程 - destroy() 似乎没有删除窗口对象
- “类型错误:参数 1 的 ..不是 Firefox 中的有限浮点值”
- Backbone - model.destroy() 函数未为模型定义
- 从列表中滚动的 Js 文本大小有限
- DHTML - 在有限的时间内显示图片
- 骨干模型.destroy()有限