車のモデルには、そのデータを取得してバックエンドで埋め込みを行うことができるように、user_id または user_name またはそのようなプロパティが含まれている必要があります。
parse()
また、モデルのメソッドを利用する必要があります。それをオーバーライドして、サーバーからの json 応答を解析します。解析すると、ユーザー モデルがバックボーンに自動的に作成されます (または、既に作成されている場合はそれを参照します)。
しかし、カーモデルを作成しながら、その方法でこれを行うこともできると思いますinitialize()
。
それはさらに良いかもしれません。
ただし、サーバーからデータを要求するときに、ユーザーに基づいて適切な車を選択する方法を求めている場合、このロジックはサーバー側にあります。サーバー側で実装する必要があります。
json 応答のように、クライアント側のモデル内に Driving_person を埋め込みたい場合は、riving_person プロパティを定義するだけで、値として json オブジェクトが含まれます。
車のモデルに新しい Backbone.Model を埋め込む場合は、車のモデルを処理する必要がありますinitialize()
。または多分parse()
。
編集:
フェッチ後にユーザー モデルを車のモデルに埋め込みたい場合は、コンストラクター メソッドをオーバーライドする必要があります。
var Car = Backbone.Model.extend({
constructor: function(data, options){
this.driving_person = new User(data.driving_person);
delete data.driving_person;
Backbone.Model.prototype.constructor.call(this, data);
}
/// Your other model code like initialize, etc.
編集2:
車ごとに新しいドライバー モデルを作成することを避けたい場合 (より多くの車が同じドライバーを共有する可能性があるため)、ドライバー モデルを取得するグローバル変数 (またはコレクション) を使用する必要があります。
これは、コードの前半で定義されたグローバル コレクションである必要があります。
次に、私が提供したこのコンストラクター内のグローバル コレクションにドライバーを追加します。
コードの早い段階でグローバルな DriverCollection を定義したとしましょう (これは次のように行います:
window.DriverCollection = Backbone.Collection.extend({
model: Driver,
次に、車のモデルを次のように作成します。
var Car = Backbone.Model.extend({
constructor: function(data, options){
if (!window.DriverCollection.find(function(driver){return driver.name == data.driving_person.name;}))
{window.DriverCollection.add(driving_person);}
data.driving_person = data.driving_person.name;
Backbone.Model.prototype.constructor.call(this, data);
}
/// Your other Car model code like initialize etc.
このように、Car コンストラクターは JSON データを受け取り、ドライバーが存在しない場合はグローバル DriverCollection に追加し、車のdriving_person
プロパティをname
埋め込まれた json ドライバー オブジェクトのプロパティに設定します。
もちろん、id などの他のプロパティを使用して、ドライバーを参照およびシークすることもできます。
これにより、重複を回避できます。
これを機能させるには、Driver モデルを定義する必要があります。