假设我有一个 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/