Backbone模型同步状态

3
在我的应用中,用户创建一个包含许多模型的集合。为了避免向服务器发出大量请求,我创建了一个自定义函数,将这些模型批量保存到服务器上。服务器会响应所有模型及其id,并将其设置为各种模型。到目前为止一切运作良好。
现在遇到的问题是Backbone不知道此时所有模型都已与服务器同步。因此,在应用程序的稍后阶段,当我对每个模型调用model.save()时,它会再次将每个模型发送到服务器(应该只有更改的模型才需要发送)。如何让Backbone知道所有模型都已同步?我看了一下'changed'和'hasChanged'属性,但不确定是否应该操纵它们(我想不应该)。
2个回答

7
Backbone不包含跟踪自上次与服务器同步以来更改的属性功能。 changedhasChanged都不处理自上次与服务器同步以来更改的属性。 您需要创建自己的机制来跟踪模型的状态: 1. 每个模型应该有一个hasChangedSinceLastSync标志。 2. 每个模型应该绑定(.on)到自己的change事件并将标志设置为true。 3. 重写sync方法,一旦从服务器返回数据(用于读取/创建/更新),就将标志设置为false。

你能提供一个实现第三步的例子吗? - Fdr
1
这里有一个完整的模型实现这个想法:https://gist.github.com/berzniz/8010245 - Tal Bereznitskey
1
那个gist中有一个bug:sync()应该返回:"return Backbone.sync(method, model, options);"而不是"Backbone.sync(method, model, options);"。 - Fdr

0

如果您的模型的id属性未设置/为空,则Backbone将进行HTTP POST以在服务器端创建您的模型。

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

另外,如果您的id属性不是id,则可以告诉backbone它是另一个属性。

请参阅文档:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接