Backbone.Model.save呼び出しを正しく作成する際に問題が発生しています。私が呼んでいるウェブサービスはURLパラメータを消費しますが、私がJavascriptで持っているものは、変更されたフィールドのオブジェクトです。たとえば、私はオブジェクト{foo: 'bar', yar: 'har'}
を持っていて、Backbone.Model.saveがURLにパッチリクエストを送るようにします。Backbone.Model.save(パッチ= true)のJSONとURLパラメータのエンコーディング
サウンドはシンプルですね。それはとにかく私に一束のトラブルを与えている。
object =
foo: 'bar',
yar: 'har'
model.save object,
patch: true
私はいくつかを試してみた:;(私は、成功/エラーコールバックを持って、あまりにも、私は、これらの質問のために重要であるとは思わない動作しません)ここで私はこれまで持っているものですあまりにも他のオプション:
model.save object,
patch: true
emulateJSON: true
このセットのcontentTypeを "アプリケーション/ x-www-form-urlencodedで"、良いですが、Backbone.syncによってAJAXリクエストで送信されたデータがあった:{モデル: " {"foo": "bar"、 "yar": "har"} "。サービスはそれを持っていて、 "モデル"プロパティで何をすべきか分かりません。
model.save object,
patch: true
contentType: "application/x-www-form-urlencoded"
これだけのコードの文字列と詰め込むなどobject
options.data
にその。再び、サービスはそれをどうしたらいいのか分からない。
これを私のサービスの仕様に準拠させる方法は他にもありますか?私は自分自身を呼び出すことができ、モデル(とそれが属しているコレクション)を自分自身で更新することができますが、実際にはそうしないでしょう。私の作品のAjaxリクエストは次のとおりです。
$.ajax
url: "http://server/path/to/service"
type: "PATCH"
data: object
更新:私の以前の2つのオプションが機能しなかった理由はBACKBONE.JS自体に明確である:
// Ensure that we have the appropriate request data.
if (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) {
params.contentType = 'application/json';
params.data = JSON.stringify(options.attrs || model.toJSON(options));
}
// For older servers, emulate JSON by encoding the request into an HTML-form.
if (options.emulateJSON) {
params.contentType = 'application/x-www-form-urlencoded';
params.data = params.data ? {model: params.data} : {};
}
これを見ると、I私はoptions.data
にオブジェクトにオブジェクトを詰め、空の属性で送信された場合は、おそらくそれが仕事だろう、多分考えた:
model.save {},
patch: true
data: object
どうやらこれがしようとしました"[オブジェクトオブジェクト]"オプションを選択してください。私はそれがオブジェクトのstringifyを行ったと思います...どこか...これは正しい答えに近いでしょうか?