2012-12-03 55 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

警報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");
+0

當你說「異步」提取時,doe這意味着它是因爲延遲,我沒​​有看到結果。 –

+0

異步意味着程序不會等待查詢返回,而是直接進入下一行。當查詢完成後,它將與'reset' -event – jakee

+0

作出反應,但是當我在本地運行這個時。我看到項目4先警報,項目2稍後警報。那麼,即使那樣我也不應該得到正確的結果嗎?我應該總是把這種代碼放在事件中嗎? –