Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript BackboneJS模型/集合urlRoot/URL的重要性_Javascript_Rest_Backbone.js_Model View Controller_Javascriptmvc - Fatal编程技术网

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]
很可能,您只需要指定Collection.url。如果您没有在模型上指定
url
urlRoot
,并且您指定的集合url为
manapp/person
,则主干网将从以下位置检索您的集合:

  • GET/manapp/person
    ,并期望得到
    person
    模型的列表
在一个单独的模型上进行操作将是非常困难的

  • 创建
    POST/manapp/person/:id
    ;数据有效负载是新的
    person
    记录的JSON
  • 阅读
    GET/manapp/person/:id
  • 更新
    PUT/manapp/person/:id
    ;数据有效负载是更新的
    person
    记录的JSON(包括非脏属性!)
  • 删除
    删除/manapp/person/:id