backbone.js fetch未更新模型

4dc9hkyq  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(139)

我读过这里的其他帖子,看起来大多数时候这归结为异步获取。我不认为这是我的问题,因为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

gtlvzcf8

gtlvzcf81#

您已经重写了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'
});

字符串

相关问题