これは、backbone.jsとWebAPIコントローラーを使用する場合の2段階の問題です。
JSON文字列を返す単純なWebAPIコントローラーがあります。フィドラーでは、結果は次のようになります。
{
"$type": "MvcApplication.Models.Article, MvcApplication",
"Id": "1",
"Heading":"The heading"
}
次のコードを使用して、WebAPIからユーザーをフェッチします
var user = new Usermodel({ id: "1" });
user.fetch({
success: function (u) {
console.log(u.toJSON());
}
});
これで、バックボーンユーザーオブジェクトは次のようになります
{
id: "1",
{
"$type": "MvcApplication.Models.Article, MvcApplication",
"Id": "1",
"Heading": "The heading"
}
}
このバックボーンモデルオブジェクトを次のようなビューテンプレートにバインドしようとすると
<form>
<input type="text" value="<%=Heading%>" />
<input type="submit" value="Save" />
</form>
見出しは未定義ですが、idを使用するとうまくバインドされますか?アンダースコアはバックボーンモデルオブジェクトが好きではなく、WebAPIから取得したものと同じようにプレーンなJSONオブジェクトが必要なようです。
user.save({ Heading: "my new heading });
これに関する2番目の問題は、ペイロードを含むモデルをWeb APIに保存すると、バックボーンモデルが完全に間違っていることです。これは、APIが次のようなユーザーオブジェクトがサーバーに送信されることを想定しているためです。
{
"$type": "MvcApplication.Models.Article, MvcApplication",
"Id": "1",
"Heading":"The heading"
}
実際のオブジェクトがラップされたバックボーンモデルではありません。アンダースコアがバックボーンモデルを処理し、エンドポイントが期待するペイロードのみを送信するようにバックボーンに指示できるように解決することは可能ですか?