我在数据库中有一个集合(一个对象列表)。我可以像collectionModel.fetch()
一样抓取它
但随后用户改变了该集合的内容。当用户单击“保存”按钮时,必须在数据库中更新整个集合列表。我想也许我可以先delete()
旧的,然后create()
新的,但我不能实现它。我不能使用update()
方法,因为在这种情况下我应该找到哪些集合元素已更改但我想更新整个列表。我怎样才能做到这一点?谢谢你的帮助。
答案 0 :(得分:4)
你在那个数据库前面有一个REST api吗?这就是Backbone的使用方式。当您的JavaScript代码运行model.save();
时,会向您的api发出针对该模型的PUT请求。
您的问题是关于保存整个集合,因为如果您想要保留在Backbone的默认实现中,您将必须遍历集合中的所有模型并为每个模型调用save。
如果要向服务器发出一个请求,则必须在集合中实现自定义方法。类似的东西:
MyCollection = Backbone.Collection.extend({
saveAll: function() {
var data = this.toJSON();
return Backbone.$.ajax({
data: { objects: data },
url: '/url/in/your/server/to/update/db'
});
}
});
这将把您集合中所有模型的数组转换为JSON发送到您的服务器。
同样,如果您希望通过Backbone轻松实现生活,那么您希望在服务器端拥有RESTful API。
答案 1 :(得分:0)
如果要重置集合,则必须指定“重置”属性。
collectionList.fetch({
reset: true,
...
});
但我认为最好更新它:
collectionList.fetch({
remove: false,
update: true,
merge: true,
...
});