私はバックボーンjsを使用してコレクションのコレクションを作成しようとするとisssueを実行しています。ここ はコードです:バックボーンjsコレクションのコレクション
モデルとコレクション:プレイリストコレクションの
var Track = Backbone.Model.extend({
defaults : {
title : ""
}
})
var TrackCollection = Backbone.Collection.extend({
model : Track,
})
var Playlist = Backbone.Model.extend({
defaults : {
name : "",
tracks : new TrackCollection,
}
})
var PlaylistCollection = Backbone.Collection.extend({
model : Playlist,
})
作成:
var playlists = new PlaylistCollection;
// create and push the first playlist
playlists.push({ name : "classic" });
// create and push a track in the playlist just created
playlists.last().get("tracks").push({ title : "fur elise" });
// create and push the second playlist
playlists.push({ name : "c2c" });
// create and push a track in the playlist just created
playlists.last().get("tracks").push({ title : "fuya" });
// display first playlist
console.log(JSON.stringify(playlists.at(0).toJSON()))
// display second playlist
console.log(JSON.stringify(playlists.at(1).toJSON()))
ここでは、出力されます。
{"name":"classic","tracks":[{"title":"fur elise"},{"title":"fuya"}]}
{"name":"c2c","tracks":[{"title":"fur elise"},{"title":"fuya"}]}
問題があり、出力で見ることができるように、2つのプレイリストには2つのトラック「毛皮エリーゼ」と「fuy a "。
私の質問はなぜですか? 2番目のプレイリスト「c2c」の「classic」と「fuya」という最初のプレイリストにのみ「毛皮のエリート」を持たせるにはどうすればよいですか?
ありがとうございます。新しいインスタンスを作成するときに
var Playlist = Backbone.Model.extend({
defaults : {
name : "",
tracks : new TrackCollection,
}
});
バックボーンがdefaults
を浅いコピーされます:
私はそれがインスタンス化時にデフォルトのコピーを実行していると思っていました。とにかく、お返事いただきありがとうございます! – Kraoz
これは素晴らしい情報であり、非常に関係しますが、初期化メソッドで新しいコレクションを作成する方が簡単で簡単ですか? –
@AlexMills:多分。私は彼らの状況について十分に知りませんでした。この答えは、「あなたがこれをやろうとすれば、それをこのやり方で行う」ことのようなものです。 –