2011-07-17 49 views
1

仍在努力學習Backbone。目前,我的觀點完全不是由於在我的Backbone Collection上調用.fetch()後發生的一些未知的,未報告的錯誤而導致的。由於這可能來自我的應用程序中的任何位置,因此我已經爲您查看所有文件設置了一個要點。Backbone.js fetch()在Collection上的問題

Link to all the code.

視圖中的註釋應該解釋正在發生的錯誤和從服務器的響應(這簡直是剛剛西納特拉+ Redis的)。 /schools的響應是[{"name":"Foo"},{"name":"Bar"}],但我不明白爲什麼會導致錯誤。即使我在我的路由器中創建了new window.fooView,我的視圖也不會由於某種原因而被初始化。誰能幫我嗎?謝謝!

回答

1

看起來像你永遠不會打電話給你的觀點render方法。你應該在router.js第8行或在第12行的index.js initialize行末尾顯式地執行此操作。有些人喜歡在initialize之後自動呈現視圖,但默認情況下骨幹期望您在需要時顯式執行此操作。我認爲你的schools.bind會爲後續更改做到這一點,但是代碼運行的方式是取得學校,這會引發事件,然後讓您製作視圖並將其綁定,所以當視圖被綁定時,不會再有事件觸發,因此render不會被調用。一個可行的例子可以更容易地進行調試,但這是我通過閱讀要點猜測的結果。

+0

所以_.bind('all',render)是完全沒用的?我認爲無論何時推斷視圖對象(在這種情況下,在路由器的'new window.fooView'中),都會調用render方法。而不是綁定它,正確的方法是直接從初始化調用它(而不是做'new window.fooView.render')? – Jason

+0

不,這不完全沒用。如果您更改集合(如再次調用fetch或添加/刪除),它將呈現視圖,但問題在於代碼的運行順序。由於提取被調用之前,你有綁定的東西,它去1. fetch調用2.集合事件激發3.你綁定到集合事件,但oops他們已經發射,所以沒有發生馬上。如果您在創建視圖對象後將您的抓取調用移動到router.js'index',那麼它應該開始工作。無論是或第一次顯式調用'render'。 –

+0

下面是一個很好的例子:http://www.jamesyu.org/2011/02/09/backbone.js-tutorial-with-rails-part-2/注意他在他的末尾叫做「渲染」 'initialize'方法。 –