0

node.js と backbone.js を使用してアプリを作成しています。ただし、モデルを保存しようとすると、モデルの JSON がモデル ディクショナリ内にネストされます。

node = new NodeModel({prop1:"value1", prop2:"value2"});
node.save();

console.log(req.body); の結果 ノードコントローラーショー内...

{model: {"prop1":"value1", "prop2":"value2"} }

標準の html フォームを使用して同じノード コントローラーに投稿すると、console.log(req.body); の結果が返されます。見せる...

{prop1:"value1", prop2:"value2"}

node.save(); を取得するにはどうすればよいですか? 通常の HTML と同じ JSON を投稿する機能はありますか?

4

1 に答える 1

1

バックボーンがJSON をエミュレートするように構成されているようです:

エミュレートJSON Backbone.emulateJSON = true

としてエンコードされたリクエストを処理できない従来の Web サーバーを使用している場合application/json、 を設定Backbone.emulateJSON = true;すると、JSON がmodelパラメータの下でシリアル化されapplication/x-www-form-urlencoded、HTML フォームからのように MIME タイプでリクエストが行われます。

対応するチャンクはBackbone.sync次のようになります。

if (!options.data && model && (method == 'create' || method == 'update')) {
  params.contentType = 'application/json';
  params.data = JSON.stringify(model.toJSON());
}
//...
if (Backbone.emulateJSON) {
  params.contentType = 'application/x-www-form-urlencoded';
  params.data = params.data ? {model: params.data} : {};
}

model.toJSON()1 番目に呼び出しが表示され、2 番目ifmodel:プレフィックスが表示されifます。言えるはずです

Backbone.emulateJSON = false;

アプリケーションのセットアップのどこか (バックボーンがロードされた後、何かを同期しようとする前) で、model:ビジネスはなくなります。

于 2012-10-22T15:44:21.550 に答える