Backbone.js - 无法获取数据,或绑定到集合上的fetch事件?

时间:2012-02-24 18:17:36

标签: javascript backbone.js

我正在使用jQuery 1.7.1,Underscore 1.3.1和Backbone 0.9.1。这是我的Backbone代码,完全是:

$(function(){
  window.Student = Backbone.Model.extend({
  });
  window.Students = Backbone.Collection.extend({
    model: Student, 
  });
  window.AllStudents = new Students();
  AllStudents.url = "/init.json";
  AllStudents.bind('reset', function() { 
      console.log('hello world');  
  }); 
  AllStudents.fetch();
  AllStudents.fetch({ url: "/init.json", success: function() {
      console.log(AllStudents);
  }, failure: function() { 
      console.log('failure');
  }});
  AllStudents.fetch({ url: "/init.json" }).complete(function() {
      console.log(AllStudents);
  });
});

在第三次.fetch()调用中,甚至只显示一个控制台语句,然后它就是一个空对象。

我很困惑。我究竟做错了什么?如何绑定到重置事件,并使用获取的数据?

这是JSON文件:

[
  { text: "Amy", freq_2011: 5 },
  { text: "Angeline", freq_2011: 26 },
  { text: "Anna", freq_2011: 55 }    
]

我已经检查过JSON文件是作为application / json提供的,我也可以看到它被XHR请求提取三次。

更新:这是我的HTML,完整:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Test</title>
</head>
<body>
<div class="container"></div>
<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.3.1/underscore-min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/backbone.js/0.9.1/backbone-min.js"></script>
<script src="/js/test.js"></script>
</body>
</html>

其他人可以重现这个问题吗?

1 个答案:

答案 0 :(得分:1)

Backbone有一个很好的函数可以被覆盖,称为parse,一旦调用成功的fetch,它就会将获取的数据作为参数。例如,您可以使用它来处理JSON:

window.Students = Backbone.Collection.extend({
    model: Student,
    parse: function(response) {
       console.log(response,response.results);
       return response.results;
  }
});