2012-08-03 30 views

回答

3

实际上,这两个sync()方法只是代理来共同Backbone.sync()方法:

集合总是在Model.sync()超过其单个个体经营委托型号如:createremove等等。但Collection在fetch()操作中使用自己的sync(),因为它与fetch模型或集合非常不同,例如:URL跟随另一个模式,后端层应该有不同的响应。

另一方面,我看到Backbone.sync()作为一种私人方法,我试图不直接使用它,如果我这样做,我感觉不舒服。我认为sync()方法是处理点,让您可以覆盖完全后端同步,您可以覆盖实现不同持久化层,例如使用的localStorage的方法。但不能直接调用。

由于@JMM在评论中所说,Model.sync()Collection.sync()也是一个不错的点要改写,使其“做一些事情的自定义,然后调用Backbone.sync()进行一切如常”

+0

你可以实现一个'sync()'方法来做一些自定义的事情,然后调用'Backbone.sync()'像往常一样继续。您不必完全替换内置实现,或者只定义一个“sync()”方法来更改持久性策略。 – JMM 2012-08-03 11:28:37

+0

@JMM你是对的,更新我的答案包括这一点。 – fguillen 2012-08-03 12:13:00

2

骨干没有在默认模式和集合一个sync - 方法,但是这两种模式,并集合有使用Backbone.sync - 方法,使方法(fetch两个模型和集合,并savedestroy的机型) Ajax的电话。 Docsannotated source

使用Backbone.sync检查用于个体收集或模型sync方法的存在的方法,这样的同步的默认功能可以通过覆盖Backbone.sync或特定部分由延伸的模型被覆盖一切或需要与sync功能自定义同步的集合。

至于为什么这两种模式和集合与服务器同步的能力:灵活性。如果只有集合具有同步功能,那么您不能拥有单独的模型,并且如果只有模型具有同步功能,您将如何从服务器初始获取大批模型。有模型和集合的同步功能没有缺点,所以为什么不呢?

我对你的反问:如何在只有其他同步的情况下进行同步?

+0

你说得对。骨干有同步方法,而不是模型和集合。 Twas我的实际问题,但不能正确地问它。对不起。现在我已经意识到为什么我们需要同时处理双方的问题,并没有回答你的反问题。我认为每次模型更改时都不能同步收集,但这并不好。 – anit 2012-08-03 11:10:26