Ich stoße auf eine Frage, wenn ich versuche, eine Sammlung von Sammlungen mit Backbone-Js zu erstellen. Hier ist der Code:
Modelle und Sammlungen:
%Vor%Erstellen der Playlist-Sammlung:
%Vor%Hier ist die Ausgabe:
%Vor%Das Problem ist, dass die 2 Playlists, wie wir an der Ausgabe sehen können, die 2 Tracks "fur elise" und "fuya" haben.
Also meine Frage ist warum? und was soll ich tun, um "fell elise" nur in der ersten Wiedergabeliste namens "classic" und "fuya" nur in der zweiten Wiedergabeliste namens "c2c" zu haben?
Danke.
Ich denke, dein Problem ist dein Standard tracks
Attribut in PlayList
:
Backbone kopiert die defaults
beim Erstellen neuer Instanzen flach:
Standardwerte
model.defaults or model.defaults()
[...]
Beachten Sie, dass Objekte in JavaScript als Verweis übergeben werden. Wenn Sie also ein Objekt als Standardwert einschließen, wird es unter allen Instanzen geteilt.
Das Ergebnis ist, dass jede einzelne PlayList
Instanz, die den Standard tracks
verwendet, genau das gleiche TrackCollection
wie das tracks
Attribut verwendet und dass TrackCollection
das ist, auf das in defaults
verwiesen wird. .
Die einfachste Lösung ist die Verwendung einer Funktion für defaults
:
Auf diese Weise wird die Funktion defaults
aufgerufen, wenn Standardwerte benötigt werden und jedes Mal, wenn defaults
aufgerufen wird, erhalten Sie eine brandneue TrackCollection
im Standardattribut tracks
.
Hier ist eine kurze Faustregel für Sie:
Wenn Sie in
defaults
etwas anderes als Strings, Zahlen oder Booleans einfügen möchten, verwenden Sie einedefaults
-Funktion anstelle einesdefaults
-Objekts.
Tags und Links backbone.js collections