如果我有一个名为"Book"的模型和一个名为"Library"的集合,定义如下:
书
app.Book = Backbone.Model.extend({
defaults: {
title: 'No title',
author: 'Unknown'
}
});
Run Code Online (Sandbox Code Playgroud)
图书馆
app.Library = Backbone.Collection.extend({
model: app.Book,
url: '/api/books'
});
Run Code Online (Sandbox Code Playgroud)
当我打电话BookInstance.save()告诉它如何使用URL?它是从集合中派生出来的吗?
在Backbone.model有2种选择:url和urlRoot.这些之间的目的和区别是什么?
在Backbone.collection,有一个参数url.这总是对RESTFUL api的GET请求吗?
mir*_*rmx 35
基本上,构建模型的URL有3种可能性:
如果集合中存在的模型对象,然后它的url方法将返回的组成的地址collection.url和model.id:[collection.url]/[id].
如果您不想在集合中使用模型,则model.urlRoot可以使用其值而不是collection.url片段,从而产生以下模式:[urlRoot]/[id].
最后,如果您不打算将给定类型的一个模型更多地保存到服务器,或者在创建每个模型时定义URL,则可以直接为其分配值model.url.
集合仅发送GET请求 - 获取模型的JSON数据数组.对于保存,删除和更新,使用单个模型save()(POST/PUT/PATCH)和destroy()(DELETE)方法.
这是源代码Backbone.Model.url,它可以帮助您:
url: function() {
var base =
_.result(this, 'urlRoot') ||
_.result(this.collection, 'url') ||
urlError();
if (this.isNew()) return base;
var id = this.get(this.idAttribute);
return base.replace(/[^\/]$/, '$&/') + encodeURIComponent(id);
}
Run Code Online (Sandbox Code Playgroud)
Ala*_*ong 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/
Run Code Online (Sandbox Code Playgroud)
您可以在此处参考骨干模型urlRoot源代码
我希望你有意义,祝你好运.