2012-02-24 72 views
4

我使用的是jQuery 1.7.1,Underscore 1.3.1和Backbone 0.9.1。這是我的骨幹代碼,在全:Backbone.js - 無法獲取數據,或綁定到集合上的獲取事件?

$(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請求,三次被取出。

UPDATE:這是我的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> 

其他人是否能重現該問題?

+0

您是否嘗試過在集合本身的定義裏面設置url參數? – 2012-02-25 21:15:40

+0

是的,沒有幫助:(請別人嘗試一下代碼,看看他們是否可以重現這個問題? – Richard 2012-02-25 21:39:04

+0

我通過在最後使用引導模型解決了這個問題:http://documentcloud.github.com/backbone/ #FAQ-bootstrap雖然我仍然完全不知道發生了什麼問題。 – Richard 2012-02-26 17:09:51

回答

0

骨幹有一個很好的功能,可以覆蓋被稱爲parse,它獲取提取的數據作爲其參數,一旦成功的獲取被調用。你可以用它來處理你的JSON一旦它的加載例如:

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