我想知道使用url
或urlRoot
之间的区别。我已阅读文档(backbonejs.org/#Model-url),但我仍然觉得我缺乏这方面的知识,我想知道更多。你何时必须使用url
?在另一个例子中,您何时必须使用urlRoot
?
答案 0 :(得分:30)
.urlRoot
仅在模型中可用,并且仅在模型不是集合的一部分时,或者当您要覆盖该模型所属的集合的.url
属性时才有用。的一部分。
换句话说,当模型属于具有.url
属性集的集合的一部分时,模型既不需要.urlRoot
也不需要.url
属性,在这种情况下,此模型将使用该集合.url
作为其自己的.urlRoot
。
以下是几个显示差异的例子。运行脚本时,可以在浏览器的网络面板中看到http请求。
示例1。 Post不是集合的一部分。 urlRoot
定义了网址的基础部分。获取模型后,它的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>
&#13;
示例2。对作为集合一部分的模型调用fetch使用集合url
作为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 */
&#13;
<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>
&#13;
示例3。 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 */
&#13;
<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>
&#13;
示例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 */
&#13;
<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>
&#13;