我读过这里的其他帖子,看起来大多数时候这归结为异步获取。我不认为这是我的问题,因为1。我在fetch和2的成功回调中测试结果。我可以稍后在js控制台中console.log(model.toJSON())
,但它仍然没有更新
注意:我从API中得到了一个很好的JSON响应,我可以通过在模型声明中放置'parse'来获取数据,如下所示
parse: function(data){
alert(data.screenname);
}
字符串
下面是我的代码,为什么模型没有被fetch调用更新
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
<script src="vendor/components/underscore/underscore-min.js"></script>
<script src="vendor/components/backbone/backbone-min.js"></script>
</head>
<body>
Hello
<script>
$.ajaxSetup({
beforeSend: function(xhr){
xhr.setRequestHeader("Authorization", "Basic " + window.btoa("username" + ":" + "password"));
}
});
var User=Backbone.Model.extend({
parse: function(data){
alert(data.screenname);
},
urlRoot: 'http://api.myapi.com/user'
});
var user=new User({id:'1'});
user.fetch({
success: function(collection, response, options){
console.log(response);
console.log(user.toJSON());
}
});
</script>
</body>
</html>
型
当我记录响应时,它显示一个好的JSON回来,但user.toJSON只显示id为1。
我可以在模型声明中使用parse
,从响应中手动分配模型中的每个值,但这似乎是一种愚蠢的方法。我的印象是fetch()
应该用来自服务器的结果填充模型。
更新以下是我从服务器返回的响应
{“id”:1,“email”:“test@email.com“,“password”:“pass”,“screenname”:“myname”,“id_zipcode”:1,“id_city”:1,“date_created”:“2014-12-25 12:12:12”}
下面是我的API的响应头:
HTTP/1.1 200 OK
Date: Tue, 04 Feb 2014 18:31:41 GMT
Server: Apache/2.2.24 (Unix) DAV/2 PHP/5.5.6 mod_ssl/2.2.24 OpenSSL/0.9.8y
X-Powered-By: PHP/5.5.6
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept
Set-Cookie: PHPSESSID=pj1hm0c2ubgaerht3i5losga4; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 139
Keep-Alive: timeout=5, max=99
Connection: Keep-Alive
Content-Type: application/json; charset=utf-8
型
1条答案
按热度按时间gtlvzcf81#
您已经重写了
parse()
方法,实际上什么也不做。它应该返回要在模型上设置的所有属性;你还没有返回任何东西,因此,没有在模型上设置任何东西。应该是这样的。
字符串