url
とurlRoot
の使用の違いを知りたいのですが。ドキュメント( backbonejs.org/#Model-url )を読みましたが、それでもこの分野の知識が不足していると感じており、もっと知りたいと思います。いつurl
を使用する必要がありますか?また、別の例では、いつurlRoot
を使用する必要がありますか?
.urlRoot
はモデルでのみ使用可能であり、モデルがコレクションの一部ではない場合、またはそのモデルが含まれているコレクションの.url
プロパティをオーバーライドする場合にのみ役立ちます。
つまり、モデルが.url
プロパティが設定されたコレクションの一部である場合、モデルは.urlRoot
プロパティも.url
プロパティも必要としません。この場合、このモデルはそのコレクションの.url
を独自の.urlRoot
として使用します。
違いを示すいくつかの例を次に示します。スクリプトを実行すると、httpリクエストがブラウザのネットワークパネルに表示されます。
例1投稿はコレクションの一部ではありません。 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
が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>
例url
をモデルに設定すると、文字通り、その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>
例4url
は関数である可能性があり、再び意味をなし始めます。
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>