我在数据库中有一个集合(一个对象列表)。我可以像这样获取它:collectionModel.fetch()
但是随后用户更改了该集合上的某些内容。当用户点击保存按钮时,整个收藏列表必须在数据库中更新。我想也许我可以delete()
先用旧的,然后create()
再用新的,但我无法做到。我不能使用该update()
方法,因为在这种情况下,我应该找到哪些集合元素已更改,但我想更新整个列表。我怎样才能做到这一点?感谢帮助。
问问题
3089 次
3 回答
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。
于 2013-08-16T16:41:08.287 回答
0
如果要重置集合,则必须指定“重置”属性。
collectionList.fetch({
reset: true,
...
});
但我认为最好只更新它:
collectionList.fetch({
remove: false,
update: true,
merge: true,
...
});
于 2013-08-16T08:48:16.803 回答
0
这是一个非常古老的问题,但我有另一种方法,所以我想我会发布它。
有时我的收藏有很多数据,而服务器并没有全部获取。我通过使用骨干集合具有的一种下划线方法解决了这个问题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()
当集合中有模型时,您可以通过调用来使用它。类似的方法可用于创建或删除集合,这应该可以修改以捕获错误,但我没有考虑到这一点。
于 2019-03-11T19:02:44.460 回答