Javascript BackboneJS模型/集合urlRoot/URL的重要性
假设我有一个人物模型/集合,如下所示Javascript BackboneJS模型/集合urlRoot/URL的重要性,javascript,rest,backbone.js,model-view-controller,javascriptmvc,Javascript,Rest,Backbone.js,Model View Controller,Javascriptmvc,假设我有一个人物模型/集合,如下所示 define([ 'base/BaseModel' ], function(BaseModel) { var Person = BaseModel.extend({ idAttribute: "personId", urlRoot: "manapp/person/", defaults: { "personId": null } return Pe
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;
});
如您所见,我在model/collection中有一个urlRoot/url属性
我的问题是,为该属性指定值的意义到底是什么?是否仅针对相应的REST资源?如果是,是否仅用于GET操作?另外,您什么时候为它们使用模型和集合?url根目录和url定义请求发送到的服务器路径 编辑:从主干文档: 网址: 返回模型资源所在的相对URL 在服务器上。如果您的模型位于其他位置,请覆盖 这种方法逻辑正确 urlRoot: 如果使用集合外部的模型,请指定urlRoot,以 启用默认url函数以根据模型生成url id.“[urlRoot]/id”通常,您不需要定义它 当您使用实现REST api的后端MVC框架(如Laravel)时,您可以在路由器中定义路径,并处理控制器对象对此路径的请求。
我将使用Laravel作为说明,因为这说明了这一点 例如,定义时:
urlRoot: "/api_v1/entities/parents"
var parent_model = new Parent_model({'id': 1});
parent_model.fetch();
parent_model.set('parent_name', 'some_parent');
parent_model.save();
Laravel实现了“资源丰富”的控制器,可以处理发送到服务器上特定urlRoot的不同REST调用:
Route::resource('entities/parents', 'ParentsController');
其中“ParentsController”实现一组方法,这些方法处理可能发生的不同REST调用
“GET”不仅是您可以使用的HTTP动词,而且是“POST”、“PUT”或“DELETE”
在主干中:
对于“GET”,可以对对象调用“fetch()”。对于“POST”,可以对对象调用“save()”。
对于“DELETE”,可以对对象调用“destroy()”。
对于“PUT”,您在对象上调用“save()”,但在更新获取的模型之后。例如:
urlRoot: "/api_v1/entities/parents"
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。基本上,主干将调用以在模型上操作的URL默认构造为:
[collection.url]/[collection.id]/[model.url]/[model.id]
/documents/8/notes/2
model.urlRoot
,以便将URL构造为:
[model.urlRoot]/[model.id]
url
或urlRoot
,并且您指定的集合url为manapp/person
,则主干网将从以下位置检索您的集合:
,并期望得到GET/manapp/person
模型的列表person
- 创建:
;数据有效负载是新的POST/manapp/person/:id
记录的JSONperson
- 阅读:
GET/manapp/person/:id
- 更新:
;数据有效负载是更新的PUT/manapp/person/:id
记录的JSON(包括非脏属性!)person
- 删除:
删除/manapp/person/:id