Backbone.sync(同步)

Backbone.sync 是 Backbone 每次向服务器读取或保存模型时都要调用执行的函数。 默认情况下,它使用 jQuery.ajax 方法发送 RESTful json 请求,并且返回一个 jqXHR。 如果想采用不同的持久化方案,比如 WebSockets, XML, 或 Local Storage,我们可以重载该函数。

Backbone.sync 的语法为 sync(method, model, [options])

  • method – CRUD 方法 ("create", "read", "update", or "delete")
  • model – 要被保存的模型(或要被读取的集合)
  • options – 成功和失败的回调函数,以及所有 jQuery 请求支持的选项

默认情况下,当 Backbone.sync 发送请求以保存模型时,其属性会被序列化为 JSON,并以 application/json 的内容类型发送。 当接收到来自服务器的 JSON 响应后,对经过服务器改变的模型进行拆解,然后在客户端更新。 当 "read" 请求从服务器端响应一个集合(Collection#fetch)时,便拆解模型属性对象的数组。

当一个模型或集合开始 sync到服务器时,将触发一个 "request" 事件。 如果请求成功完成,你会得到一个"sync"事件, 如果请求失败,你会得到一个 "error"事件。

sync函数可重写为全局性的Backbone.sync, 或在细粒度级别, 通过添加一个 sync函数 到Backbone集合或单个模型时。

默认 sync 映射 REST 风格的 CRUD 类似下面这样:

  • create → POST /collection
  • read → GET /collection[/id]
  • update → PUT /collection/id
  • patch → PATCH /collection/id
  • delete → DELETE /collection/id

举个例子,一个Rail 4 处理程序响应一个来自Backbone"update"调用,可能是这样的: (在真正的代码中, 千万不要盲目的使用update_attributes, ,你可以被改变的属性始终是白名单。)

def update
  account = Account.find params[:id]
  account.update_attributes params.require(:account).permit(:name, :otherparam)
  render :json => account
end

一个技巧: 通过设置ActiveRecord::Base.include_root_in_json = false,在模型上禁用默认命名空间的to_json来整合 Rails 3.1之前的版本, 。

ajaxBackbone.ajax = function(request) { ... }; 如果你想使用自定义的AJAX功能, 或者你的客户端不支持的jQuery.ajax API,你需要调整的东西, 您可以通过设置Backbone.ajax这样做。

emulateHTTPBackbone.emulateHTTP = true 如果你想在不支持Backbone的默认REST/ HTTP方式的Web服务器上工作, 您可以选择开启Backbone.emulateHTTP。 设置该选项将通过 POST 方法伪造 PUTPATCHDELETE 请求 用真实的方法设定X-HTTP-Method-Override头信息。 如果支持emulateJSON,此时该请求会向服务器传入名为 _method 的参数。

Backbone.emulateHTTP = true;

model.save();  // POST to "/collection/id", with "_method=PUT" + header.

emulateJSONBackbone.emulateJSON = true 如果你想在不支持发送 application/json 编码请求的Web服务器上工作,设置Backbone.emulateJSON = true;将导致JSON根据模型参数进行序列化, 并通过application/x-www-form-urlencoded MIME类型来发送一个伪造HTML表单请求,