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);

2 番目のアラートで長さが正しく表示されない理由がわかりません。

4

1 に答える 1

2

アラートalert(employeeList.length + " item(s) found")は正しい長さを表示する必要があります。これresetは、コレクションの入力に続いて -event がトリガーされた後に実行されるためです。

alert(employeeList.length);コレクションはデフォルトで取得されるため、直後のアラートではfetch一貫して正しい結果が得られるわけではありません。asynchronouslyそのため、アラートは の AJAX 呼び出しが発生した直後に処理され、fetchまだ返されていない可能性があります。

タイムラインはこんな感じ

  1. フェッチは ajax 呼び出しをトリガーします'http://localhost:80/employee/employee/employeelist'
  2. alert(employeeList.length);が呼び出されましたが、コレクションは空です
  3. フェッチが返され、最終的にreset
  4. alert(employeeList.length + " item(s) found");と呼ばれる
于 2012-12-03T11:53:59.990 に答える