Chciałbym wiedzieć, jaka jest różnica między używaniem url
lub urlRoot
. Przeczytałem dokumentację (backbonejs.org/#Model-url), ale nadal uważam, że brakuje mi wiedzy w tej dziedzinie i chciałbym wiedzieć więcej. Kiedy musisz użyć url
? A w innym przypadku, kiedy trzeba użyć urlRoot
?Jaka jest różnica między url vs urlRoot
Odpowiedz
.urlRoot
jest dostępna tylko w modelu i jest przydatna tylko wtedy, gdy model nie jest częścią kolekcji lub gdy chcemy nadpisać właściwość .url
kolekcji, której częścią jest ten model.
Innymi słowy, model nie wymaga ani .url
ani .urlRoot
właściwości, gdy jest częścią kolekcji z zestawem .url
nieruchomości, w tym przypadku model ten będzie wykorzystywał że Collection .url
jako swój własny .urlRoot
.
Oto kilka przykładów pokazujących różnicę. Po uruchomieniu skryptów żądania HTTP można zobaczyć w panelu sieci przeglądarki.
Przykład 1. Post nie należy do kolekcji. urlRoot
definiuje podstawową część adresu URL. Po pobraniu modelu jego identyfikator jest dołączany do urlRoot
.
var Post = Backbone.Model.extend({
urlRoot: 'http://jsonplaceholder.typicode.com/posts'
});
var secondPost = new Post({ id: 2 });
secondPost.fetch();
/*requests http://jsonplaceholder.typicode.com/posts/2 */
<script src='http://code.jquery.com/jquery.js'></script>
<script src='http://underscorejs.org/underscore.js'></script>
<script src='http://backbonejs.org/backbone.js'></script>
Przykład 2 Wywołanie pobrać ze wzorem, który jest częścią zbioru wykorzystuje Collection url
jako urlRoot
var Post = Backbone.Model.extend();
var Posts = Backbone.Collection.extend({
url: 'http://jsonplaceholder.typicode.com/posts',
model: Post
});
var posts = new Posts();
posts.add({id: 2});
posts.first().fetch();
/*requests http://jsonplaceholder.typicode.com/posts/2 */
<script src='http://code.jquery.com/jquery.js'></script>
<script src='http://underscorejs.org/underscore.js'></script>
<script src='http://backbonejs.org/backbone.js'></script>
Przykład 3.url
ustawiony na modelu dosłownie użyje tego adresu URL dla dowolnej instancji modelu.
var Post = Backbone.Model.extend({
url: 'http://jsonplaceholder.typicode.com/posts'
});
var secondPost = new Post({ id: 2 });
secondPost.fetch();
/*requests http://jsonplaceholder.typicode.com/posts */
<script src='http://code.jquery.com/jquery.js'></script>
<script src='http://underscorejs.org/underscore.js'></script>
<script src='http://backbonejs.org/backbone.js'></script>
Przykład 4.url
może być funkcją i zacznie znowu sensu.
var Post = Backbone.Model.extend({
url: function(){
return 'http://jsonplaceholder.typicode.com/posts/' + this.get('slug');
}
});
var secondPost = new Post({ slug: 2 });
secondPost.fetch();
/*requests http://jsonplaceholder.typicode.com/posts/2 */
<script src='http://code.jquery.com/jquery.js'></script>
<script src='http://underscorejs.org/underscore.js'></script>
<script src='http://backbonejs.org/backbone.js'></script>
check to http://stackoverflow.com/questions/16862014/backbone-js-models-and-collection-urls – Animesh
Dziękuję bardzo! –