我想获取api,格式类似于apps/[:id]/result
。
对于大多数示例或documentation有关设置,urlRoot基于具有相同的根网址。
但我的问题是api共享相同的根和api名称的结尾。
我尝试使用下面的代码,但它不起作用。
var Model = Backbone.Model.extend({
urlRoot: "/apps"
})
var model = new Model({id: 123123 + "/content"]}) //123123 just fake id
是否只能更改ID的middle
?
或者在这种情况下,使用urlRoot
是不合适的?
答案 0 :(得分:1)
Backbone的持久性方法是围绕url
和urlRoot
构建的,专为RESTful持久性而设计。每种方法都旨在使用明确定义的语义与服务器通信(GET /path
表示列表,PUT /path/:id
表示更新等)。
Chaning id
的含义是一个坏主意,因为你离开了那些语义,意味着a)你的模型不能用于创建,更新或删除REST操作,以及b)你的代码将变得困难理解,因为id
将不再是描述性变量名称。 Backbone在模型和集合中频繁使用id
,因此更改其含义是一个非常糟糕的主意。
如果您没有使用REST API,或者您的特定操作不适合该范例(如搜索),则最好实现自己的方法来生成自定义HTTP请求。
在你的情况下,这样的事情应该像你期望的那样工作:
var Model = Backbone.Model.extend({
urlRoot: "/apps",
fetchResult: function() {
return $.ajax({
url: this.url() + '/result'
}).then(function(response) {
// do something with response
// return response, or the result of your processing,
// for downstream promise handlers
return response;
}, function() {
console.error('fetchResult failed');
})
},
})
使用这种方法,RESTful URL按设计工作,您不会丢失id
的语义。