Backbone.js批量更新集合
Backbone.js updating a collection in bulk
我有一个对象集合,这些对象将被批量更新(不一定同时更新所有,而是不止一个)。
因此,我需要批量向服务器发送更新(即不是每个更新对象都有一个请求),并且我需要进行部分更新(即只更新已更改的对象)。
我遇到的问题:
- Collection上没有
save()
方法(考虑到它有fetch()
方法,这很奇怪) - 没有对集合中自上次与服务器同步以来发生更改的模型进行内置跟踪
有没有一种干净、优雅的方式来实现这一点?
我研究并尝试了一些事情,但所有的解决方案都相当笨拙和过于复杂——这对于一个旨在简化这类事情的框架来说是不可接受的。
当然,在Backbone中有一种体面的方法可以做这样一件常见的事情。或者我应该使用另一个框架,例如Angular JS?
您只需构建一个模型的JSON表示数组。像这样的东西。
Backbone.Collection.prototype.save = function()
{
var data = [];
for (var n = 0; n < this.length; ++n)
{
data.push(this.models[n].toJSON());
}
// save data through jQuery
console.log(data);
};
var col = new Backbone.Collection();
col.add({status: true});
col.add({status: false});
col.save();
您可以添加一些model.hasChanged()
检查,以防止不必要的节省。
为了帮助任何发现这个问题的人,我最终使用了以下内容(基于@joconja的回答):
Backbone.Collection.prototype.saveChanges = function() {
var data = [];
for (var i = 0; i < this.length; ++i) {
if (this.models[i].hasChanged()) {
var changes = this.models[i].changedAttributes();
changes.id = this.models[i].get('id');
data.push(changes);
this.models[i].changed = {};
}
}
Backbone.ajax({
url: this.url,
method: 'PUT',
contentType: 'application/json',
data: JSON.stringify(data)
});
};
相关文章:
- 使用它更新集合中的嵌套数组's索引
- Backbone.js批量更新集合
- 登录后Meteor更新集合
- 如何更新集合数据并使用骨干木偶重新渲染
- 如何更新集合上的 TTL
- Meteor使用对象更新集合
- 主干.js:使用不同的数据更新集合
- 在主干应用中持久更新集合模型的正确方案
- Backbone 如何在需要时更新集合模型
- MongoDB(通过Meteor)在更新集合文档时将对象属性视为字符串
- 更新集合中的值
- MongoDB外壳:如何从集合更新集合
- 使用下划线/Lo短划线更新集合对象
- 主干 .fetch() 未使用最新数据更新集合
- 如何在不破坏角度数据绑定的情况下更新集合中的项
- Model.extend无法更新集合.Backbone.js错误
- ng-repeat绑定集合,使用选项卡过滤布尔值,当我更新集合时,过滤器不会重新应用
- 如何更新集合中的所有模型- Backbone.js
- 使用json的主干更新集合
- MongoDB:更新集合中所有文档的嵌套数组字段