Z mojego punktu widzenia domyślnym zachowaniem modeli szkieletowych JS jest zwrócenie adresu URL kolekcji, , chyba że model ma określony urlRoot
. Nie mogę sprawić, żeby to zachowanie działało.BackboneJS model.url przy użyciu kolekcji collection.url
Z dokumentacji:
model.url (...) Generuje adresy URL w postaci: "[collection.url]/[id]" domyślnie, ale można zastąpić, określając wyraźne urlPobiega, jeśli kolekcja modelu nie powinna być brana pod uwagę.
Oto moja kolekcja, i model odpowiednio:
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;
Kiedy model jest ładowany bez zbierania, działa świetnie i przedkłada /theurl
, ale po załadowaniu do kolekcji wszystkie metody są przesyłane pod numer /theurl/param/
.
Jeśli dobrze rozumiem dokumentację, model urlRoot
powinien nadpisać to zachowanie; a nawet wtedy URL modelu powinien być /theurl/param/{MODEL-ID}
.
Jakieś pomysły na temat tego, czego mi brakuje/nieporozumienia?
...
PS: model: Model
z kolekcji doprowadza się poprzez RequireJS
Dzięki za odpowiedź. Dokumentacja wydaje się tam bardzo niejednoznaczna. Wszelkie pomysły na to, dlaczego nie dołączają identyfikatora modelu do końca adresu URL kolekcji? – caleb
Jest kilka rzeczy. Czy właśnie stworzyłeś model na kliencie? Jeśli tak, to nie musi mieć identyfikatora, ponieważ nie został jeszcze zapisany na serwerze. W tym przypadku będzie miał tylko cID. – dcarson
Myślę, że powinno to zamiast tego powiedzieć: 'yourModel.save ({}, {url: yourModel.urlRoot});'. Sposób, w jaki obecnie jest napisany, spowoduje ustawienie właściwości 'url' na obiekcie, ponieważ pierwszym argumentem funkcji' zapisz' jest asocjacja atrybutów. – flyingL123