BackboneJS模型/集合urlRoot/URL的意义
BackboneJS Significance of Model/Collection urlRoot/URL
假设我有一个Person模型/集合,如下所示;
define([
'base/BaseModel'
], function(BaseModel) {
var Person = BaseModel.extend({
idAttribute: "personId",
urlRoot: "manapp/person/",
defaults: {
"personId": null
}
return Person;
});
define([
'base/BaseCollection',
'model/Person'
], function(BaseCollection, Person) {
var PersonCollection = BaseCollection.extend({
url: "manapp/person",
model: Person
});
return PersonCollection;
});
正如您所看到的,我在模型/集合中有一个urlRoot/url属性。
我的问题是,为这个属性指定值究竟有什么意义?它只针对相应的REST资源吗?如果是,是否仅用于GET操作?此外,您究竟什么时候为他们使用模型和集合?
urlRoot和url定义了请求发送到的服务器路径。
编辑:从主干文档:
网址:
返回模型资源所在的相对URL在服务器上。如果您的模型位于其他位置,请覆盖这种方法具有正确的逻辑。
urlRoot:
如果您在集合之外使用模型,请指定urlRoot,以启用默认url函数以基于模型生成urlid。"[urlRoot]/id"通常,您不需要定义它。
当您使用实现RESTapi的后端MVC框架(如Laravel)时,您可以在路由器中定义路径,并处理从控制器对象到该路径的请求
我会用拉拉威尔作为例子,因为这很清楚。
当你定义例如:
urlRoot: "/api_v1/entities/parents"
Laravel实现了"足智多谋"的控制器,可以处理发送到服务器上特定urlRoot的不同REST调用:
Route::resource('entities/parents', 'ParentsController');
其中"ParentsController"实现了一组方法,用于处理可能发生的不同REST调用。
"GET"不是唯一可以使用的HTTP谓词,还可以使用"POST"、"PUT"或"DELETE"。
在主干网中:对于"GET",您可以对对象调用"fetch()"
对于"POST",您可以对对象调用"save()"
对于"DELETE",您可以对对象调用"destroy()"
对于"PUT",您在对象上调用"save()",但在更新了获取的模型之后。例如:
var parent_model = new Parent_model({'id': 1});
parent_model.fetch();
parent_model.set('parent_name', 'some_parent');
parent_model.save();
在上面的示例中,"PUT"请求被发送到以下路径:
/api_v1/entities/parents/1
控制器实现了一个处理服务器上REST调用的函数,如下所示:
public function update($id){ //Update code db here };
除了这些标准的REST调用之外,Laravel还实现了一个"index"方法,该方法不将id作为参数,并处理一个通用的"GET"请求
我倾向于使用它从服务器获取集合:
例如,父母的index()方法将返回所有父母,并且不适用于一个特定的父母记录。
希望能有所帮助。
Kim Gysen的答案集中在服务器端;我想您可能会询问url
和urlRoot
之间的客户端差异,以及它们在模型与集合上的操作方式。
您可以指定一个Model.urlRoot
来覆盖集合的默认url。Backbone文档对其进行了很好的解释,但基本上,Backbone将调用以对您的模型进行操作的URL默认构造为:
[collection.url]/[collection.id]/[model.url]/[model.id]
这对于作为"父"集合一部分的模型尤其有效,例如:
/documents/8/notes/2
现在,如果您操作的模型是"独立的",而不是集合的一部分,那么您可以指定一个Model.urlRoot
,这样URL就被构造为:
[model.urlRoot]/[model.id]
很可能,您只需要指定Collection.url。如果您没有在模型上指定url
或urlRoot
,而是指定了manapp/person
的集合url,那么Backbone将从以下位置检索您的集合:
GET /manapp/person
,并且期望Person
模型的列表
在单个模型上操作将是
-
创建:
POST /manapp/person/:id
;数据有效载荷是新person
记录的JSON -
阅读:
GET /manapp/person/:id
-
更新:
PUT /manapp/person/:id
;数据负载是更新的person
记录的JSON(包括非脏属性!) -
删除:
DELETE /manapp/person/:id
- 如何使用url加载程序在webpack中导入多个图像
- 使用php或javascript从facebook相册URL中删除多余的部分
- Angular JS IE9 Hashbang url rewriting
- JavaScript下拉菜单-点击按钮并根据所选值重定向到url
- 直接下载文件,而不是从window.open(url)
- 动态地改变“”的URL;添加新项目”;链接使用javascript/jquery
- 通过js在新选项卡中有条件地打开url
- CKFinder 3为所选文件返回错误的URL
- 如何获取不属于我项目的上一页的URL
- ReactJS映射:如何仅在url变量不为空时呈现html链接
- 在URL中传递JS对象
- 将纯文本URL转换为可单击链接
- Javascript html每点击一次就会更改url
- 以角度管理动态URL
- Mathias URL shortener
- 如何有效地将游戏数据存储在URL查询字符串中
- 使用带括号的图像URL作为jQuery的背景
- JS:检查URL中的参数,然后迭代一个参数为var的函数
- BackboneJS模型/集合urlRoot/URL的意义
- 指定URL或URLRoot属性-backline.js