結果を属性モデルのを設定set
メソッドに渡されます。あなたの混乱のポイントは、モデルのIDがその属性の1つではないということです。 のプロパティの1つで、です。
だから、何が起こることはこれです:
- あなたの生データは、サーバーから戻ってくると、今
id
属性で増補同じ生データは、set
に渡されること
parse
- に渡され、
set
ルックスとあなたのidAttribute
([ 'personId', 'jobId' ]
)と
- 生データのキーのすべてのこれらのキーのいずれも
idAttribute
と一致していないので、n個そのうちの1つがモデルのIDとして使用されるため、問題が発生します。
this.id
parse
内部の作品を設定するあなたのソリューションが、解析は、一般的にモデル自体は変更しないように、それの入力(生データ)上で動作するように設計されているので、それは道の下の問題を引き起こす可能性があります。その部分はset
が呼び出されたときに次に起こるはずです。クリーナー解決策ではなく、次のような何かをすることです:
app.Assignment = Backbone.Model.extend({
// note that no idAttribute is specified, leaving it as the default "id"
parse : function(resp) {
resp.id = resp.personId + "_" + resp.jobId;
return resp;
}
}
それとも、あなたは常に強制することができさておき、ここidAttribute
の問題から、あなたが別のID属性をしたい場合は...
app.Assignment = Backbone.Model.extend({
idAttribute: 'personAndJobId',
parse : function(resp) {
resp.personAndJobId = resp.personId + "_" + resp.jobId;
return resp;
}
}
バックボーンはコンポジットキーをサポートしていないため、 'idAttribute'を配列として定義すると有効ではありません。すべてのモデルには1つのidフィールドが必要です。あなたのリソースURLはどのように見えますか? – jevakallio
複合キーをサポートしています:https://github.com/documentcloud/backbone/pull/1558実際に私はthis.id = ...の代わりにresp.ide = ...の代わりにそれを解決しました。 –
https://github.com/caseywebdev/backbone-composite-keysを使用してください。その質問に言及するのは理にかなったでしょうか。 – jevakallio