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
方法伪造 PUT
,PATCH
和 DELETE
请求 用真实的方法设定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表单请求,