Bessere Lösung für verschachtelte Backbone.js Sammlungen

Viele meiner Rückgrat Modelle beschäftigen sich oft mit verschachtelten Modellen und Sammlungen, so weit bin ich mit einer Kombination von defaults, parse und toJSON manuell zu erreichen verschachteln:

ACME.Supplier = Backbone.Model.extend({
    defaults: function() {
        return {
            contacts: new ACME.Contacts(),
            tags: new ACME.Tags(),
            attachments: new ACME.Attachments()
        };
    },

    parse: function(res) {
        if (res.contacts) res.contacts = new ACME.Contacts(res.contacts);
        if (res.tags) res.tags = new ACME.Tags(res.tags);
        if (res.attachments) res.attachments = new ACME.Attachments(res.attachments);

        return res;
    }
});

ACME.Tag = Backbone.Model.extend({
    toJSON: function() {
        return _.pick(this.attributes, 'id', 'name', 'type');
    }
});

Ich habe ein paar plugins gibt, die im Grunde genommen die gleiche wie oben, aber mit viel weniger Kontrolle und mehr boilerplate, so Frage ich mich, wenn jemand eine elegantere Lösung für dieses gemeinsame Backbone.js problem.


Edit: ich landete mit dem folgenden Ansatz:

ACME.Supplier = Backbone.Model.extend({
    initialize: function(options) {
        this.tags = new ACME.Tags(options.tags);
    },

    parse: function(res) {
        res.tags && this.tags.reset(res.tags);

        return res;
    }
});

ACME.Tag = Backbone.Model.extend({
    toJSON: function() {
        return _.pick(this.attributes, 'id', 'name', 'type');
    }
});

Es ist erwähnenswert, dass später entdeckte ich, dass Sie brauchen, um passieren verschachtelten Modell/Sammlung von Daten aus dem Konstruktor in Konstruktor der geschachtelten Modelle mit dem options Objekt.

Schreibe einen Kommentar