Backbone js Sammlung von Sammlungen Ausgabe

8

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.

    
Kraoz 03.12.2012, 00:20
quelle

1 Antwort

8

Ich denke, dein Problem ist dein Standard tracks Attribut in PlayList :

%Vor%

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 :

%Vor%

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 eine defaults -Funktion anstelle eines defaults -Objekts.

    
mu is too short 03.12.2012, 00:37
quelle

Tags und Links