主干仅保存具有已更改数据的集合中已更改的模型

Backbone saving only changed models in a collection with changed data

本文关键字:集合 模型 数据 保存      更新时间:2023-09-26

如果我有一个模型集合,然后在我的代码中,我会这样做:

collection[0].set({name: "Joe"});
collection[1].set({username: "abcd"});
collection[10].set({name: "bob"});

有没有办法对所有模型进行.save(),但让它只更新已更改的字段和模型?就好像集合包含 1000+ 个模型一样,第一次做一个fetch已经占用了大量的系统资源,而对 1000+ 个模型做一个.save()会占用更多......

从文档中:

相反,如果您只想将更改的属性发送到服务器,请调用 model.save(attrs, {patch: true})。

与其对属性执行set()然后保存,不如调用 model.save 并传递一组 attr

您可以迭代集合,使用 hasChanged() 检查模型是否已更改,并为更改的模型发送PATCH(或与Sync一起更改该模型)请求。您可以使用changedAttributes检测更改的属性

伪代码:

collection.each(function(model){
  if(model.hasChanged())
    model.save(attrs, {patch: true});
//---------------^ could be a single attribute, changes attributes or whatever
});

旁注:您不应该一次拥有 1000 个模型......有分页、延迟加载等技术