Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails BackboneJS同步帮助程序(如Backbone.Sync.rails)的用途是什么?_Ruby On Rails_Backbone.js - Fatal编程技术网

Ruby on rails BackboneJS同步帮助程序(如Backbone.Sync.rails)的用途是什么?

Ruby on rails BackboneJS同步帮助程序(如Backbone.Sync.rails)的用途是什么?,ruby-on-rails,backbone.js,Ruby On Rails,Backbone.js,我正在试验Rails BackboneJS堆栈,我在一些演示项目中看到了Backbone.sync.Rails的使用,例如,在这种风格中: 据我所知,这会覆盖主干模型和集合的同步功能。然而,在我的例子中,我得到了一些奇怪的效果(模型中意外的嵌套、空集合) 所以,我问自己,Rails同步助手的目的是什么?当(不)使用这些助手时,考虑什么是重要的? 谢谢 Sync本质上是主干网的通用钩子,用于所有较低级别的数据处理定制。在同步文档中,他们也会说: Backbone.sync是Backbone每次尝试

我正在试验Rails BackboneJS堆栈,我在一些演示项目中看到了Backbone.sync.Rails的使用,例如,在这种风格中:

据我所知,这会覆盖主干模型和集合的同步功能。然而,在我的例子中,我得到了一些奇怪的效果(模型中意外的嵌套、空集合)

所以,我问自己,Rails同步助手的目的是什么?当(不)使用这些助手时,考虑什么是重要的?


谢谢

Sync本质上是主干网的通用钩子,用于所有较低级别的数据处理定制。在同步文档中,他们也会说:

Backbone.sync是Backbone每次尝试将模型读取或保存到服务器时调用的函数。默认情况下,它使用jQuery.ajax发出RESTful JSON请求并返回jqXHR。您可以覆盖它以使用不同的持久性策略,例如WebSocket、XML传输或本地存储

在Rails同步助手的例子中,作者甚至没有改变同步的基本性质(例如到本地存储)。相反,他的sync仍然“使用jQuery.ajax发出JSON请求并返回jqXHR”,但它:

  • 将CSRF令牌添加到请求中
  • 添加可选的“paramRoot”属性,您可以使用该属性指定应将模型的数据添加到请求中
  • 你可以在这里看到#1:

    和#2在这里:

    我说不清你为什么会这样

    奇怪的效果(模型中的意外嵌套、空集合)

    但就个人而言,我建议只编写自己的
    主干.sync
    。正如你所看到的,实现它的功能没有太多的困难,通过制作自己的定制功能,你天生就了解它是如何工作的(这很好,因为它对你的应用程序非常关键)

    或者,您可以完全避免整个
    主干.sync
    覆盖方法。相反,您可以使用其他机制,例如jQuery
    .ajaxSend()
    来处理#1或您自己的自定义
    Model.toJSON
    覆盖#2

    beforeSend: function( xhr ) {
        if (!options.noCSRF) {
          var token = $('meta[name="csrf-token"]').attr('content');
          if (token) xhr.setRequestHeader('X-CSRF-Token', token);  
        }
        model.trigger('sync:start');
    }
    
    if(model.paramRoot) {
        data[model.paramRoot] = model.toJSON();
    } else {
        data = model.toJSON();
    }