Konvertieren von JSON-Daten an das Rückgrat-Modell mit Kind-Sammlung
Arbeite ich mit einer Playlist-Objekt, das bestimmte Eigenschaften definieren sich selbst als auch als PlaylistItem Sammlung.
Wenn ich Daten von meinem server, ich bekomme seine JSON-Antwort in meiner client-side-Erfolgs-Methode:
success: function (data) {
console.log("JSON data:", data);
playlists = _.map(data, function (playlistConfig) {
return new Playlist(playlistConfig);
});
...
}
Hier, ich meine konvertieren von JSON-Daten in Playlist-Objekte. Jede Wiedergabeliste-Objekt ist ein Rückgrat.Modell.
Hier ist, wie meine Daten Aussehen:
Und hier ist, was die Playlist-Konstruktor sieht so aus:
return function(config) {
var playlist = new Playlist(config);
return playlist;
};
var Playlist = Backbone.Model.extend({
defaults: function() {
return {
id: null,
userId: null,
title: 'New Playlist',
selected: false,
position: 0,
shuffledItems: [],
history: [],
items: Backbone.Collection.extend({
model: PlaylistItem
})
};
},
...
}
Mein problem:
Wenn ich eine Playlist erstellen-Objekt mit Standardwerten initialisiert er die mit einem leeren Rückgrat.Sammlung für PlaylistItem. Jedoch wenn ich eine Playlist erstellen-Objekt mit einem bereits definierten Sammlung, bekomme ich einen basic-array und kein Rückgrat.Sammlung. Dies ist, weil ich die Arbeit mit JSON-Daten vom server, die nicht umgewandelt worden Rückgrat Entitäten noch. Daten erstreckte sich über die Playlist-Standardeinstellungen und überschreibt das Rückgrat.Sammlung Einheit.
Was ist eine richtige Art und Weise zu initialisieren, mit einem besiedelten Rückgrat.Sammlung? Ich könnte schreiben, code Initialisiert die Kontrollen der Typ der meine items-array und wenn es kein Rückgrat.Sammlung ich konnte, erstellen Sie ein neues Rückgrat.Sammlung und fügen Sie die Elemente, um es zu ersetzen und dann das alte array mit dem neuen, aber das scheint wirklich hoakey.
InformationsquelleAutor Sean Anderson | 2013-01-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht definieren, Ihre PlalistItems-Sammlung in Verzug, aber vorher.
Erstellen Sie dann eine initialize-Methode auf das Playlist-Modell etwa so:
Überprüfen Sie heraus die Geige hier: http://jsfiddle.net/georgedyer/r2XKb/
(Sie müssen die Konsole öffnen, um die Sammlung zu sehen)
InformationsquelleAutor georgedyer
Einem anderen Problem, das ich gestoßen bin, war nach dem speichern Ihres Modells zu dem server erhalten Sie wieder eine Antwort, dass wird sich ändern Sie Ihre embedded-Sammlung in ein normales javascript-array. Um dies zu beheben musste ich das überschreiben der Funktion parse auf meiner model-Klasse wie folgt:
InformationsquelleAutor agaddie