私は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に設定して簡単に修正しました。しかし、バックボーン(0.9.2)コードのコメントによると、これはレガシーサーバーを対象としています。私はDjango1.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]"
Backboneで優先されるようにajaxにjQueryを使用していますが、jQueryにエラーがある可能性があります。
アップデート3:Backbone.syncで使用されている$.ajaxを自分のものでオーバーライドすることで解決しました。それはまだ簡単な修正です。
Backbone.jsバージョン:0.9.2
jQueryバージョン:1.8.0。1.7.2でも試してみました。同じ結果。