Многих из моих моделей Backbone часто имеет дело с вложенными моделями и коллекциями, до сих пор я использую комбинацию defaults
, parse
и toJSON
вручную для достижения вложенности:лучшее решения для вложенных коллекций Backbone.js
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.
Edit: я закончил с следующим подходом:
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
.
Я считаю, что этот подход - единственный способ пойти, не прибегая к плагину или подобное, спасибо. –
спасибо, это было очень полезно – Richard