1

バックボーン モデルを保存しています。使用している API を正しく機能させるには、'full=true' も渡す必要があります。たとえば、保存するには次のようにする必要があります。

myModel.save(null, { data: { full: true} });

しかし、このようにするとうまくいきません。Chrome 開発ツールのネットワーク タブを見ると、リクエストの [object Object] が表示されます。

ここに画像の説明を入力

一方、 JSON.stringify を使用すると、正常に動作するようです:

myModel.save(null, { data: JSON.stringify({ full: true}) });

ここに画像の説明を入力

もちろん、毎回 JSON.stringify を使用できますが、なぜこれが起こっているのかを知りたいので、カスタム Backbone.sync を作成できる可能性があります...

4

1 に答える 1

3

誰かが同じ質問に出くわした場合に備えて、ここで自分の質問に答えます。

バックボーン ajax 経由で送信する前に、データ オブジェクトは最終的に文字列である必要があります。最初のケースではこれをしなかったので、ネイティブの .toString() メソッドを介して文字列に強制されました。例えば:

var obj = {};
obj.toString(); //[object Object]

これは API にとっては無意味です。

2 番目のケースでは、データ オブジェクトを文字列化したため、問題なく動作しました。

Backbone.sync はデータ オブジェクトをモデル属性で文字列化しますが、明示的なデータ オブジェクトを渡すとオーバーライドされます。

if (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) {
  params.contentType = 'application/json';
  params.data = JSON.stringify(options.attrs || model.toJSON(options));
}
于 2013-11-13T18:10:12.817 に答える