骨干模型.destroy()有限

Backbone model.destroy() limited

本文关键字:有限 destroy 模型      更新时间:2023-09-26

我正试图批量删除一组骨干模型,比如…

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 === 10collection.each的参数将是m00。所以你调用m0.destroy(),它位于索引0。

在第一次迭代结束时,collection包含以下型号

[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()
}

同意前面的答案,不允许这样做。

很快,在这种情况下我会怎么做:

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();
});