1

我在数据库中有一个集合(一个对象列表)。我可以像这样获取它:collectionModel.fetch() 但是随后用户更改了该集合上的某些内容。当用户点击保存按钮时,整个收藏列表必须在数据库中更新。我想也许我可以delete()先用旧的,然后create()再用新的,但我无法做到。我不能使用该update()方法,因为在这种情况下,我应该找到哪些集合元素已更改,但我想更新整个列表。我怎样才能做到这一点?感谢帮助。

4

3 回答 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 回答