2012-12-03 2 views
0

backbone.js를 사용 중이며 흥미로운 시나리오를 발견했습니다.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

경고는 reset -event가 컬렉션 채우기 후에 트리거 된 후에 실행되므로 올바른 길이를 표시해야합니다.

경고 컬렉션은 기본적으로 인출 asynchronously, 그래서 경고가 바로 해고 된 fetch에 대한 AJAX 호출 후 처리 가능성이되지 않았기 때문에, 지속적으로 정확한 결과를 제공하지 않아야 alert(employeeList.length); 바로 fetch 후 아직 돌아왔다.

타임 라인

  1. 가 반입이라고 'http://localhost:80/employee/employee/employeelist'
  2. alert(employeeList.length);에 Ajax 호출을 트리거 같은 것입니다 만, 컬렉션
  3. 가져 오기 반환 결국 호출되는 reset
  4. alert(employeeList.length + " item(s) found");을 유발 비어
+0

"비동기 적으로"가져온 단어를 말할 때 doe 그것은 지연 때문에 나는 결과를 보지 못한다는 것을 의미합니다. –

+0

비동기는 프로그램이 쿼리가 돌아 오기를 기다리지 않고 대신 다음 줄로 곧바로 진행 함을 의미합니다. 쿼리가 완료되면'reset' -event – jakee

+0

과 반응 할 것입니다. 그러나 이것을 로컬에서 실행할 때. 나중에 항목 4 경고 및 항목 2 경고가 표시됩니다. 그렇다면 올바른 결과를 얻지 못하면 안 될까요? 나는 항상 이런 종류의 코드를 이벤트에 넣어야합니까? –

관련 문제