Backbone Send Post数据编码为查询字符串

Ada*_*ner 6 rest http-post url-encoding backbone.js

我正在创建一个连接到RESTful后端的骨干应用程序.当我在模型上调用save()时,它将发布的数据作为字符串化的JSON发送:

{"firstName":"first","lastName":"last","Email":"email@gmail.com"}
Run Code Online (Sandbox Code Playgroud)

但我的服务器希望它的格式像查询字符串:

firstName=first&lastName=last&Email=email@gmail.com
Run Code Online (Sandbox Code Playgroud)

有没有办法让骨干以不同的方式发送它?

cor*_*cho 8

Backbone不提供开箱即用的任何东西.
但很容易根据您的需要覆盖和定制它.

看一下源代码:http: //documentcloud.github.com/backbone/docs/backbone.html

并查看该呼叫save,它将sync在后台触发呼叫.

所以你需要的是Backbone.sync用你自己的功能覆盖功能.

我会修改以下部分:

if (!options.data && model && (method == 'create' || method == 'update')) {
      params.contentType = 'application/json'; 
      params.data = JSON.stringify(model.toJSON());
}
Run Code Online (Sandbox Code Playgroud)

if (!options.data && model && (method == 'create' || method == 'update')) {
      params.contentType = 'application/json';
      params.data = $.param(model); // <-- CHANGED 
}
Run Code Online (Sandbox Code Playgroud)

请注意我正在使用jQuery param

如果要使用自定义函数,请检查以下问题: Javascript对象的查询字符串编码

[更新.]
无需直接修改.最好使用您自己的函数'Backbone.sync'覆盖它.检查Backbone存储库的"TODO"示例.它有一个localStorage.js覆盖Backbone.sync函数的文件https://github.com/documentcloud/backbone/tree/master/examples