gpt4 book ai didi

javascript - 主干模型.destroy() 有限

转载 作者:行者123 更新时间:2023-11-28 12:34:43 28 4
gpt4 key购买 nike

我正在尝试批量删除 Backbone 模型的集合,如下所示......

collection.each(function(model, i){
model.destroy();
});

我发现当每个循环包含 model.destroy() 时,它会在计数到 10 后停止。如果我再次运行它,它会停止 5。3.. 2.. 然后 1 之后的时间.

如果我用 console.log(i) 替换 model.destroy(),循环将运行集合的长度。

这是 Backbone 中为了防止一次性删除 1000 条记录而有意设置的限制,还是浏览器对相对同时进行的 DELETE 方法数量的限制?

最佳答案

这是 Backbone 中为了防止一次性删除 1000 条记录而有意设置的限制,还是浏览器对相对同时进行的 DELETE 方法数量的限制?

没有。

问题是您在每次迭代时都在修改集合。考虑以下因素。

假设您一开始收集了 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 === 10collection.each 的参数将为 m00。所以你调用位于索引 0 处的 m0.destroy()

在第一次迭代结束时,您的集合包含以下模型

[m1,m2,m3,m4,m5,m6,m7,m8,m9]

以下是问题开始的地方:

现在,您的第二次迭代是 collection.length === 9each 函数现在正在进行第二次迭代,并获取索引为 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()
}

关于javascript - 主干模型.destroy() 有限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18392874/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com