2012-12-01 59 views
2

在我的应用程序中,用户使用一堆模型创建一个集合。由于我不想向服务器发出大量请求,因此我创建了一个自定义函数,将这些模型批量保存到服务器。然后服务器以包括它们的id在内的所有模型作出响应,然后将其设置为各种模型。迄今为止所有的工作都很好骨干模型同步状态

我现在遇到的问题是Backbone不知道在这一点上所有模型都与服务器同步。因此,在应用程序的稍后时间,当我在每个模型上调用model.save()时,它会将每个模型再次发送到服务器(应该只是自批处理操作后更改的模型)。我怎么能让Backbone知道所有模型都同步?我正在看'变化'和'hasChanged'属性,但我不太确定我是否应该操纵这些(我猜不是)。

回答

7

主干不包括跟踪自上次更改属性以来的功能与服务器同步。

changedhasChanged未处理自上次与服务器同步以来已更改的属性。

您必须创建自己的机制来跟踪你的模型的状态:

  1. 每个模型应该有一个hasChangedSinceLastSync标志。
  2. 每个模型都应绑定(.on)它自己的change事件并将该标志设置为true。
  3. 覆盖sync方法,并在从服务器返回数据(用于读取/创建/更新)时将标志设置为false。
+0

您能否提供一个示例来说明如何实施步骤3? – Fdr

+1

下面是一个实现这个想法的完整模型:https://gist.github.com/berzniz/8010245 –

+1

该gist有一个错误:sync()应该返回:“return Backbone.sync(method,model,options); “而不是“Backbone.sync(方法,模型,选项);” – Fdr

0

如果您的模型的id属性为未设置/ null,则骨干将创建HTTP POST以创建模型服务器端。

因此,您应该做的是在服务器返回它们时手动设置此id属性。

此外,如果您的id属性不是id,您可以告诉主干这是另一个属性。

CF,文档: