我正在使用backbone.js与REST API进行交互,当它发布到它以创建新资源时,响应状态为201,"Location"标头指向资源的URI,但是空体.
当我创建一个新模型时,它成功了,但模型的本地表示只包含我明确设置的属性,而不包含将在服务器上设置的任何属性(created_date等)
根据我的理解,Backbone将使用正文中的数据更新其模型的表示,如果有的话.但是,既然没有,它就没有.
所以,显然,我需要使用Location标头中的位置来更新模型,但是最好的方法是什么.
我目前的心态是我必须从头部解析url,拆分id,设置模型的id,然后告诉模型fetch().
这看起来非常混乱.有更清洁的方法吗?
我对API有一些影响.是尝试让API作者将新模型作为响应主体返回的最佳解决方案(保留201和位置标题)?
谢谢!
听起来你将不得不做一些定制.也许覆盖从Backbone.Model继承的模型类的parse方法和url方法.
继承的功能是:
url : function() {
var base = getUrl(this.collection);
if (this.isNew()) return base;
return base + (base.charAt(base.length - 1) == '/' ? '' : '/') + this.id;
},
parse : function(resp) {
return resp;
},
Run Code Online (Sandbox Code Playgroud)
你可以尝试类似的东西:
parse: function(resp, xhr) {
this._url = xhr.getResponseHeader('location')
return resp
}
url: function() {
return this._url
}
Run Code Online (Sandbox Code Playgroud)
是的,backbone.js真的希望保存(可以是PUT或POST)的结果是一个可解析的主体,可用于更新模型.如果,如您所说,您对API有影响力,您应该看看是否可以安排内容正文包含资源属性.
正如您所指出的那样,进行第二次线上调用以完全实现模型是没有意义的.
可能是状态代码200更合适.纯粹主义者可能认为201状态代码意味着只返回一个位置而不是实体.显然,在这种情况下这没有意义.
| 归档时间: |
|
| 查看次数: |
3418 次 |
| 最近记录: |