0

我正在学习backbone.js,遇到了有趣的场景。

var EmployeeList = Backbone.Collection.extend({
  url: 'http://localhost:80/employee/employee/employeelist'
});

alert('Collection created');

var employeeList = new EmployeeList();
employeeList.on("reset", function(){
  alert(employeeList.length + " item(s) found");
});
employeeList.fetch();

alert(employeeList.length);

我无法理解为什么第二个警报没有正确显示长度。

4

1 回答 1

2

警报alert(employeeList.length + " item(s) found")应该显示正确的长度,因为它是在reset填充集合后触发 - 事件之后运行的。

alert(employeeList.length);紧随其后的警报fetch不应始终为您提供正确的结果,因为asynchronously默认情况下会获取集合,因此在触发的 AJAX 调用之后立即处理警报fetch并且可能尚未返回。

时间线是这样的

  1. Fetch 触发 ajax 调用'http://localhost:80/employee/employee/employeelist'
  2. alert(employeeList.length);被调用,但集合为空
  3. Fetch 返回最终触发一个reset
  4. alert(employeeList.length + " item(s) found");叫做
于 2012-12-03T11:53:59.990 回答