javascript - BackboneJS 模型/集合 urlRoot/URL 的意义

标签 javascript rest backbone.js model-view-controller javascriptmvc

假设我有一个 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;
});

如您所见,我在 model/collection 中有一个 urlRoot/url 属性。

我的问题是指定此属性的值到底有什么意义?是只针对对应的REST资源吗?如果是,是否仅适用于 GET 操作?另外,您具体什么时候使用它们的模型和集合?

最佳答案

urlRoot 和 url 定义请求发送到的服务器路径。

编辑:来自 Backbone 文档:

网址:

Returns the relative URL where the model's resource would be located on the server. If your models are located somewhere else, override this method with the correct logic.

网址根:

Specify a urlRoot if you're using a model outside of a collection, to enable the default url function to generate URLs based on the model id. "[urlRoot]/id" Normally, you won't need to define this.

当您使用后端 MVC 框架(例如实现 REST api 的 Laravel)时,您可以在路由器中定义路径并处理从 Controller 对象到此路径的请求。
我将使用 Laravel 作为说明,因为这很清楚。

当您定义例如:

urlRoot: "/api_v1/entities/parents"

Laravel 实现了“资源丰富”的 Controller ,可以处理发送到服务器上特定 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

Controller 实现了一个处理服务器上 REST 调用的函数,如下所示:

public function update($id){ //Update code db here }; 

除了这些标准的 REST 调用之外,Laravel 还实现了一个“index”方法,该方法不采用 id 作为参数,并处理通用的“GET”请求。
我倾向于使用它从服务器获取集合:
例如,父项的 index() 方法将返回所有父项,并且不适用于某一特定父项记录。

希望有帮助。

关于javascript - BackboneJS 模型/集合 urlRoot/URL 的意义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23060233/

相关文章:

javascript - 使用循环将行添加到 sqlite 数据库 (Phonegap)

javascript - 如何在用户单击 Enter 按钮时停止触发按钮 React js?

java - 如何在curl中调用具有两个请求正文参数的endPoint

javascript - 返回到backbone.js路由器中的索引

javascript - 如何在javascript中添加数组中的前三个元素并删除之前的结果

javascript - 有没有办法在输入复选框中传递两个值

java - 如何获取特定错误而不是内部服务器错误?

c# - 将查询字符串添加到 REST GET

javascript - 如何在 ItemView 的 className 中获取模型属性?

javascript - 一旦不再需要 View ,取消委托(delegate)事件的最佳方式