如何更新数据库中的整个Backbone.js集合?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何更新数据库中的整个Backbone.js集合?相关的知识,希望对你有一定的参考价值。
我在数据库中有一个集合(一个对象列表)。我可以像:collectionModel.fetch()
一样获取它然后用户更改该集合上的内容。当用户单击“保存”按钮时,必须在数据库中更新整个集合列表。我想也许我可以先用旧的delete()
,然后用新的create()
它,但我不能实现它。我不能使用update()
方法,因为在这种情况下,我应该找到哪些集合元素已更改但我想更新整个列表。我怎样才能做到这一点?感谢帮助。
你在那个数据库前面有一个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。
如果要重置集合,则必须指定“重置”属性。
collectionList.fetch({
reset: true,
...
});
但我认为最好只更新它:
collectionList.fetch({
remove: false,
update: true,
merge: true,
...
});
这是一个非常古老的问题,但我有另一种方法,所以我想我会发布它。
有时我的馆藏有很多数据,而服务器却无法完成所有数据。我通过使用骨干集合中的一个下划线方法解决了这个问题,invoke
(也依赖于jquery):
MyCollection = Backbone.Collection.extend({
update: function(callback) {
// Invoke the update method on all models
$.when.apply($, this.invoke('update')).then(() => {
// After complete call the callback method (if passsed)
if(callback) {
callback();
}
});
}
});
当集合中包含模型时,您可以通过调用collection.update()
来使用它。类似的方法可以用于创建或删除集合,这应该是可修改的以捕获错误,但我没有考虑到这一点。
以上是关于如何更新数据库中的整个Backbone.js集合?的主要内容,如果未能解决你的问题,请参考以下文章