骨干模型同步状态

时间:2012-12-01 15:23:27

标签: javascript rest backbone.js

在我的应用中,用户使用一堆模型创建一个集合。由于我不想向服务器发出大量请求,因此我创建了一个自定义函数,将这些模型批量保存到服务器。然后服务器响应所有模型,包括它们的id,然后将其设置为各种模型。到目前为止一切运作良好。

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

2 个答案:

答案 0 :(得分:7)

Backbone不包括自上次与服务器同步后跟踪已更改属性的功能。

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

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

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

答案 1 :(得分:0)

如果模型的HTTP POST属性未设置/为null,Backbone将创建id来创建模型服务器端。

所以你应该做的是在服务器返回时手动设置这个id属性。

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

Cf,文档: