同步收集随后端变化



我使用backbone.js,我有许多模型。该集合被检索并显示在前端。在前端,我希望用户删除并在集合中添加新型号。

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

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

this.collection.sync()

它会删除并添加模型吗?

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

制作一个API端点来管理模型

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

该集合还具有.create功能,该功能将新模型添加到它并同时保存。

在一个请求中完成所有操作的最佳事情。

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

pros

  • 可重复使用的端点管理单个模型
  • 光数据传输,比发送整个集合的速度快(仅通过部分更新发送更改)
  • 可能的自定义行为 for for to ever
  • Easy 实时更新实现

cons

  • 进行大量更改时会有更多要求
  • 需要具有IDS的模型
  • 管理的其他端点
  • 并不是要进行批量操作(一次保存所有模型)

将集合的models数组放入模型

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

var CollectionModel = Backbone.Model.extend({
    urlRoot: "collection/endpoint/"
});
var myModel = new CollectionModel();
// ...sometime later...
myModel.save({
    arrayAttribute: yourCollection.toJSON()
}, { patch: true });

pros

  • 一个端点;总是对API的呼叫
  • 易于实现;只是在保存发生的地方

cons

  • 所有模型都会在每个请求上转移,无论更改
  • 如果收藏很大,可能会很慢

Collection的.sync函数只是Backbone.sync的代理,没有正确的参数就什么都不做。它仅在.fetch(第1055行)内使用,并且不应直接使用,除非添加自定义行为。

相关内容

最新更新