我在这里阅读了其他帖子,看起来大部分时间都归结为获取异步。我不认为这是我的问题,因为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
答案 0 :(得分:2)
您已覆盖了parse()
方法,无法有效执行任何操作。它应该返回在模型上设置的所有属性;你没有返回任何东西,因此,没有在模型上设置任何东西。
应该是这样的。
var User=Backbone.Model.extend({
parse: function(data){
alert(data.screenname);
return data; //all attributes in data will be set on the model
},
urlRoot: 'http://api.myapi.com/user'
});