wielu moich modeli Szkieletowymi często do czynienia z zagnieżdżonych modeli i kolekcji, do tej pory używam kombinacji defaults
, parse
i toJSON
ręcznie do uzyskania zagnieżdżaniaLepsze rozwiązanie dla zagnieżdżonych zbiorów 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');
}
});
Spojrzałem na kilka wtyczek, które zasadniczo robią to samo, co powyżej, ale z dużo mniejszą kontrolą i większą liczbą elementów, więc zastanawiam się, czy ktoś ma bardziej eleganckie rozwiązanie tego wspólnego problemu Backbone.js.
Edit: skończyło się następujące podejście:
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');
}
});
Warto zauważyć, że później odkryłem, że trzeba przejść zagnieżdżone dane modelu/kolekcji z konstruktora do konstruktor modelu zagnieżdżonego za pomocą obiektu options
.
Uważam, że takie podejście to jedyny sposób na obejście bez uciekania się do wtyczki lub podobne, dzięki. –
dziękuję, to było bardzo pomocne – Richard