Backbone仅保存已更改数据的集合中的模型

时间:2016-03-04 17:38:13

标签: javascript jquery backbone.js

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

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

有没有办法可以对所有模型进行.save(),但只更新已更改的字段和模型?好像该集合包含1000多个模型,第一次执行fetch已经占用了大量系统资源,为1000多个模型执行.save()将占用更多...

2 个答案:

答案 0 :(得分:1)

来自documentation

  

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

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

答案 1 :(得分:0)

您可以迭代整个集合,使用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个模型......然而,有分页,延迟加载等技术