В чем разница между url и urlRoot
Я хотел бы знать, в чем разница между использованием url
или urlRoot
. Я прочитал документацию (backbonejs.org/#Model-url), но я все еще чувствую, что мне не хватает знаний в этой области и я хотел бы знать больше. Когда вы должны использовать url
? И в другом случае, когда вам нужно использовать urlRoot
?
1 ответов
.urlRoot
доступно только в модели, и полезен только тогда, когда модели не является частью коллекции, или когда вы хотите переопределить .url
свойство коллекции, частью которой является эта модель.
другими словами, модель не требует ни .url
, ни .urlRoot
свойство, когда оно является частью коллекции с .url
набор свойств, в этом случае эта модель будет использовать эту коллекцию .url
как это свой .urlRoot
.
здесь несколько примеры, которые показывают разницу. При запуске скриптов http-запросы можно увидеть в сетевой панели браузера.
Пример 1. Post не является частью коллекции. urlRoot
определяет базовую часть URL-адреса. Когда модель извлекается, ее id добавляется к 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>
Пример 2. вызов fetch на модели, которая является частью коллекции, использует url
as the 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>
Пример 3. url
set на модели будет буквально использовать этот url для любого экземпляра модели.
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>
Пример 4. url
может быть функцией, и она снова начинает иметь смысл.
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>