url vs urlRoot有什么区别

时间:2014-05-07 06:15:35

标签: backbone.js marionette

我想知道使用urlurlRoot之间的区别。我已阅读文档(backbonejs.org/#Model-url),但我仍然觉得我缺乏这方面的知识,我想知道更多。你何时必须使用url?在另一个例子中,您何时必须使用urlRoot

1 个答案:

答案 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;
&#13;
&#13;

示例2。对作为集合一部分的模型调用fetch使用集合url作为urlRoot

&#13;
&#13;
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;
&#13;
&#13;

示例3。 url在模型上设置将逐字地用于任何模型实例。

&#13;
&#13;
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;
&#13;
&#13;

示例4。 url可以是一个功能,它又开始变得有意义了。

&#13;
&#13;
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;
&#13;
&#13;