为什么骨干在模型和集合中都有同步方法?

时间:2012-08-03 10:41:02

标签: backbone.js sync

无论如何只在集合中使用同步方法或仅在模型中使用同步方法就足够了,为什么他们必须在两个地方同步?

2 个答案:

答案 0 :(得分:3)

实际上,两个sync()方法只是常见Backbone.sync()方法的代理:

集合总是委托Model.sync()针对各个模型进行单独操作,例如:createremove等。但是Collection在sync()操作中使用了自己的fetch(),因为它与模型或集合的fetch非常不同,例如:URL跟随另一个模式,后端层应该响应不同

另一方面,我将Backbone.sync()视为私有方法,我尝试不直接使用它,如果我这样做,我感觉不舒服。我认为sync()方法是一个处理程序点,允许您完全覆盖后端同步一个可以覆盖的方法,以实现不同的 persistance层,例如使用 LocalStorage 。但不是直接打电话。

正如@JMM在评论中所说的那样,Model.sync()Collection.sync()也是一个被覆盖的好点,以使其“做一些自定义然后调用Backbone.sync()像往常一样继续“

答案 1 :(得分:2)

默认情况下,Backbone在模型和集合中没有sync方法,但是模型和集合都有方法(fetch用于模型和集合以及save,{使用destroy方法进行ajax调用的模型{1}}。 Docsannotated source

使用Backbone.sync的方法检查单个集合或模型是否存在Backbone.sync方法,因此可以通过覆盖sync来覆盖所有内容的默认sync功能或者通过扩展需要与Backbone.sync函数进行自定义同步的模型或集合来获取特定部分。

至于为什么两个模型和集合都能够与服务器同步: 灵活性 。如果只有集合具有同步功能,那么您就无法拥有单独的模型,并且如果只有模型具有同步功能,那么您最初如何从服务器获取大批量模型。模型和集合的同步功能没有任何缺点,所以为什么不呢?

我的反问题:如何才能同步其他就足够了?