让我们说我有一个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操作?此外,您何时才能使用模型和集合?
答案 0 :(得分:1)
urlRoot和url定义请求发送到的服务器路径。
编辑:来自Backbone文档:
url:
返回模型资源所在的相对URL 在服务器上。如果您的模型位于其他位置,请覆盖 这种方法具有正确的逻辑。
urlRoot:
如果您正在使用集合之外的模型,请指定urlRoot 启用默认网址功能以根据模型生成网址 ID。 “[urlRoot] / id”通常,您无需定义此内容。
当您使用实现REST API的Laravel等后端MVC框架时,您可以在路由器中定义路径并从控制器对象处理对此路径的请求。
我会用Laravel作为插图,因为这清楚了。
例如,定义时:
urlRoot: "/api_v1/entities/parents"
Laravel实现了“资源丰富”的控制器,可以处理发送到服务器上特定urlRoot的不同REST调用:
Route::resource('entities/parents', 'ParentsController');
'ParentsController'实现处理可能发生的不同REST调用的方法集。
'GET'不是您可以使用的唯一HTTP动词,而且还是'POST','PUT'或'DELETE'。
在Backbone中: 对于'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()方法将返回所有父项,并且不适用于一个特定的父项记录。
希望它有所帮助。
答案 1 :(得分:1)
url
和urlRoot
之间的客户端差异,以及它们如何对模型与集合进行操作。
指定Model.urlRoot
以覆盖集合的默认网址。 Backbone docs很好地解释了它,但基本上,Backbone将调用以在模型上运行的URL默认构造为:
[collection.url]/[collection.id]/[model.url]/[model.id]
对于属于父母"集合,如:
/documents/8/notes/2
现在,如果您使用的是#34; standalone"而不是集合的一部分,您指定Model.urlRoot
,以便URL构造为:
[model.urlRoot]/[model.id]
很有可能,您只需要指定一个Collection.url。如果您未在模型上指定url
或urlRoot
,并且指定了manapp/person
的集合网址,则Backbone将从以下位置检索您的集合:
GET /manapp/person
,并期待Person
个模型列表然后在单个模型上进行操作
POST /manapp/person/:id
;数据有效负载是新person
记录GET /manapp/person/:id
PUT /manapp/person/:id
; data payload是更新的person
记录的JSON(包括非脏属性!)DELETE /manapp/person/:id