Лучшее решение для вложенных коллекций Backbone.js

Многие из моих моделей Backbone часто имеют дело с вложенными моделями и коллекциями, до сих пор я использую комбинацию defaults, parseи toJSONвручную для достижения вложенности:

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');
    }
});

Я просмотрел несколько плагинов, которые в основном делают то же самое, что и выше, но с гораздо меньшим контролем и большим количеством шаблонов, поэтому мне интересно, есть ли у кого-нибудь более элегантное решение этой распространенной проблемы Backbone.js.


Редактировать:Я остановился на следующем подходе:

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');
    }
});

Стоит отметить, что позже я обнаружил, что вам нужно будет передавать данные вложенной модели/коллекции из конструктора в конструктор вложенной модели через optionsобъект.

17
задан T J 14 December 2014 в 13:39
поделиться