如果我有一个名为“Book”的模型和一个名为“Library”的集合,如下所示:
书
app.Book = Backbone.Model.extend({
defaults: {
title: 'No title',
author: 'Unknown'
}
});
库
app.Library = Backbone.Collection.extend({
model: app.Book,
url: '/api/books'
});
当我致电BookInstance.save()
时,如何使用该网址?它是从集合中派生出来的吗?
在Backbone.model
中有2个选项:url
和urlRoot
。这些之间的目的和区别是什么?
在Backbone.collection
中,只有一个参数url
。这总是对RESTFUL api的GET请求吗?
答案 0 :(得分:35)
基本上,构建模型的URL有三种可能性:
如果模型对象存在于集合中,则其url
方法将返回由collection.url
和model.id
组成的地址:[collection.url]/[id]
。
如果您不想在集合中使用模型,则可以使用model.urlRoot
的值而不是collection.url
片段,从而产生以下模式:{{ 1}}。
最后,如果您不打算将更多给定类型的模型保留到服务器,或者在创建每个模型时定义URL,则可以直接为{{1}分配值}。
集合仅发送GET请求 - 获取模型的JSON数据数组。对于保存,删除和更新,使用单个模型的[urlRoot]/[id]
(POST / PUT / PATCH)和model.url
(DELETE)方法。
Here's the source code of Backbone.Model.url
,它可以帮到你:
save()
答案 1 :(得分:12)
在模型中
如果 urlRoot 存在 然后book.fetch()将获取给定 id 的数据,例如
var Book = Backbone.Model.extend({urlRoot: 'books' });
var book = new Book({id: 1});
book.fetch(); // will get /books/1
var Book = Backbone.Model.extend({});
var book = new Book({url: 'books/1'});
book.fetch(); // will get /books/1
var Books = Backbone.Collection.extend({model: Book});
var books = new Books({ /*....*/ });
books.fetch(); // will get /books/
您可以参考骨干模型urlRoot源代码here
我希望你有意义,祝你好运。