使用后端同步集合更改

时间:2016-12-08 12:14:34

标签: javascript backbone.js backbone-collections

我使用Backbone.js,我有一组模型。检索此集合并显示在前端。在前端,我希望用户删除并添加新模型到该集合。

当用户完成并点击"保存"时,我希望更新整个集合。这意味着当点击' save'时,会同步(以某种方式)集合。保存添加的模型,删除删除的模型。

如果我通过删除和添加模型来操作集合,然后使用ex:

this.collection.sync()

它会删除并添加模型吗?

1 个答案:

答案 0 :(得分:0)

至少有两种方法可以实现这一目标。

创建API端点以管理模型

添加/更新模型时,请使用.save直接保存模型,删除模型后,请在其上调用.destroy

该集合还有一个.create function,可以将新模型添加到其中并同时保存。

  

最好在一个请求中完成所有事情。

并非总是如此。集合可能很大,而且变化相当小,因此每次与服务器交换100个对象,而不是在列表中添加,删除或更新模型的X个小请求。

<强>赞成

  • 可重复使用的端点来管理各个模型
  • 轻量数据传输,比发送整个集合更快(仅通过部分更新发送更改)
  • 每项操作可能自定义行为
  • 轻松实时更新实施

<强>缺点

  • 进行大量更改时的更多请求
  • 需要模型才能拥有ID
  • 要管理的其他端点
  • 不适用于批量操作(一次保存所有模型)

将集合的models数组放入模型

收藏不是要保存的。相反,将集合的models放入与API端点通信的模型中。此端点应该期望具有数组字段的对象,该字段可用于替换集合服务器端。

var CollectionModel = Backbone.Model.extend({
    urlRoot: "collection/endpoint/"
});

var myModel = new CollectionModel();

// ...sometime later...

myModel.save({
    arrayAttribute: yourCollection.toJSON()
}, { patch: true });

<强>赞成

  • 一个端点;始终对API的调用
  • 易于实施;只是在一个保存发生的地方

<强>缺点

  • 无论更改如何,所有模型都会根据每次请求进行转移
  • 如果收藏很大,可能会很慢

Collection's .sync function只是Backbone.sync的代理,没有正确的参数就什么都不做。它仅在.fetchline 1055)内部使用,并不打算直接使用,除非添加自定义行为。