我是 Backbone.js 的新手,我正在尝试保存模型实例。我正在使用 django 作为我的服务器。
客户端代码:
var Song = Backbone.Model.extend({
defaults: {
name: 'New Song'
},
url: function() {
return window.location.href;
}
});
var song = new Song()
song.save()
csrfmiddlewaretoken
在发送数据之前正确设置。
我单步执行了 Backbone.sync 内部调用的 jQuery $.ajax 函数,发现模型对象包含正确的数据。
但是,request.POST
服务器收到的是
POST:<QueryDict: {u'[object Object]': [u'']}>
而不是实际数据。知道我哪里出错了吗?
更新:我通过设置Backbone.emulateJSON
为 true 进行了快速修复。但根据 Backbone (0.9.2) 代码中的注释,它适用于旧版服务器。我正在使用 Django 1.4.1。这是否意味着 django 1.4.1 不兼容?
更新 2:当我设置Backbone.emulateJSON
为 时false
,我在 Firefox 中收到以下错误,但它在 chrome 中静默失败。
"[Exception... "Component returned failure code: 0x80460001
(NS_ERROR_CANNOT_CONVERT_DATA)" nsresult: "0x80460001 (NS_ERROR_CANNOT_CONVERT_DATA)"
location: "JS frame :: http://localhost:8000/static/jquery.js :: <TOP_LEVEL> :: line 8214" data: no]"
我正在使用 jQuery 作为 Backbone 首选的 ajax,似乎错误可能在 jQuery 中。
更新 3:我通过用我自己的覆盖 Backbone.sync 使用的 $.ajax 来解决它。它仍然是一个快速修复。
Backbone.js 版本:0.9.2
jQuery 版本:1.8.0。还尝试了 1.7.2。结果相同。