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:

Konvertieren von JSON-Daten an das Rückgrat-Modell mit Kind-Sammlung

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.

Siehe meine Antwort auf diese Frage für ein Muster für die Verwaltung der Sammlung von Eigenschaften innerhalb der Modelle: stackoverflow.com/questions/14315302/...

InformationsquelleAutor Sean Anderson | 2013-01-21

Schreibe einen Kommentar