1

this.model.save() を使用してモデルを保存することと、jquery ajax タイプの PUT を使用することの間には、いくつかの違いがあるようです?

APIコントローラーに次のメソッドがあります

public void Put(string id, [FromBody]IContent value) {
    // save
}

また、次のように JSON フォーマッタ シリアライザ設定で TypeNameHandling を有効にしました。

config.Formatters.JsonFormatter.SerializerSettings.TypeNameHandling = TypeNameHandling.Auto;

このようにjquery ajaxを使用してデータをPUTした場合

$.ajax({  
    url: "/api/page/articles/1",  
    type: "PUT",  
    dataType: "json",  
    contentType: "application/json",
    data: JSON.stringify({"$type": "BrickPile.Samples.Models.Article,BrickPile.Samples","id": "articles/1", "heading": "Some heading..." })
});

オブジェクトは put メソッドで正しくバインドされますが、バックボーンで model.save() を使用してオブジェクトを保存しようとすると、入力値が null になり、オブジェクトをバインドできませんか?

これは私がそれを行う方法です:

this.model.set({ heading: 'foo' });
this.model.save();

少なくともfirebugを見ると、リクエストヘッダーは問題ないようで、ペイロードはJSONのようです。同じペイロードでフィドラーを使用して一部のデータを API に PUT することもできますが、firebug からペイロード ソースをコピーする場合はできません: http://cl.ly/Nkedを参照してください。

ここで私が間違っていることを誰かが説明できますか?

4

1 に答える 1

0

モデルの実装について詳しく知らなければ、確実に言うのは難しいです。Firebugのスクリーンショットからわかることの1つは、id属性が渡され"articles/1"ていることです。これは、標準のバックボーンでは珍しいことです。モデルオブジェクトを保存する場合、IDは通常。になります"1"。したがって、amodel.save()はHTTP PUTを生成しarticles/1、jsonをを含むものとして渡し{"id":"1", ... }ます。Backbone.syncのドキュメントには、デフォルトの動作の詳細が記載されています。

于 2013-03-22T06:20:39.730 に答える