2014-05-07 16 views
20

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

+5

check to http://stackoverflow.com/questions/16862014/backbone-js-models-and-collection-urls – Animesh

+0

Dziękuję bardzo! –

Odpowiedz

29

.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>

Powiązane problemy