Molti dei miei modelli Backbone affrontare spesso con modelli annidati e raccolte, fino ad ora sto usando una combinazione di defaults
, parse
e toJSON
manualmente per ottenere la nidificazione:migliore soluzione per le collezioni Backbone.js annidati
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');
}
});
Ho esaminato alcuni plugin là fuori che fondamentalmente fa lo stesso di sopra ma con molto meno controllo e più boilerplate, quindi mi chiedo se qualcuno abbia una soluzione più elegante a questo comune problema di Backbone.js.
Edit: ho finito con il seguente approccio:
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');
}
});
Vale la pena notare che più tardi ho scoperto che è necessario passare i dati del modello/raccolta nidificate dal costruttore in il costruttore del modello annidato tramite l'oggetto options
.
Credo che questo approccio sia l'unico modo per procedere senza ricorrere a un plug-in o simili, grazie. –
grazie, questo è stato molto utile – Richard