Dalla mia comprensione il comportamento predefinito di Backbone JS Models è quello di restituire l'URL della raccolta, a meno che il modello abbia un urlRoot
specificato. Non riesco a far funzionare il comportamento.BackboneJS model.url utilizzando collection.url
Dalla documentazione:
model.url() ... genera URL della forma: "[collection.url]/[id]" per impostazione predefinita, ma è possibile ignorare specificando un esplicito urlRoot se la collezione del modello non deve essere presa in considerazione.
Ecco la mia collezione, e il modello, rispettivamente:
var MyCollection = Backbone.Collection.extend({
model: Model,
initialize: function(options){
this.options = options || {};
},
url: function(){
return "/theurl/" + this.options.param;
}
});
return MyCollection;
...
var MyModel = Backbone.Model.extend({
urlRoot: '/theurl',
initialize: function() {
}
});
return MyModel;
Quando un modello viene caricato senza una collezione, funziona benissimo e presenta al /theurl
, ma quando viene caricato in una raccolta, tutti i metodi vengono inviati a /theurl/param/
.
Se sto capendo correttamente la documentazione, il urlRoot
del Modello dovrebbe sovrascrivere questo comportamento; e anche allora l'url dei modelli dovrebbe essere /theurl/param/{MODEL-ID}
.
Qualche idea su cosa mi manca/incomprensione?
...
PS: Il model: Model
della collezione è portato in via RequireJS
Grazie per la risposta. La documentazione sembra super ambigua lì. Qualche idea sul motivo per cui non si aggiunge l'ID modello alla fine dell'URL della raccolta? – caleb
Ci sono alcune cose. Hai appena creato il modello sul client? Se è così non avrà necessariamente un ID in quanto non è stato ancora salvato sul server. In questo caso avrà solo un cId. – dcarson
Penso che questo dovrebbe invece dire: 'yourModel.save ({}, {url: yourModel.urlRoot});'. Il modo in cui è attualmente scritto sta per 'set' la proprietà' url' sull'oggetto perché il primo argomento di 'save' è un hash degli attributi. – flyingL123