2012-02-12 58 views
0

我想顯示一個簡單的語言列表。Backbone.js:模型不出現

class Language extends Backbone.Model 

    defaults: 
     id: 1 
     language: 'N/A' 

class LanguageList extends Backbone.Collection 

    model: Language 
    url: '/languages' 

languages = new LanguageList 

class LanguageListView extends Backbone.View 

    el: $ '#here' 

    initialize: -> 
     _.bindAll @ 
     @render() 

    render: -> 
     languages.fetch() 
     console.log languages.models 

list_view = new LanguageListView 

languages.models雖然我檢查了請求進來,語言是牽強顯示爲空。我錯過了什麼嗎?

謝謝。

回答

1

fetch調用是異步的:

collection.fetch([options])

取模型的默認設置爲這個集合從服務器,重新集合,當他們到達。選項散列需要successerror回調,這些回調將通過(collection, response)作爲參數。當模型數據從服務器返回時,集合將重置。

結果是您的console.log languages.modelslanguages.fetch()調用從服務器返回任何東西之前被調用。

所以你應該render看起來更像是這樣的:

render: -> 
    languages.fetch 
     success: -> console.log languages.models 
    @ # Render should always return @ 

這應該讓你在控制檯上的東西。

initialize中調用languages.fetch並將@render綁定到集合的reset事件會更有意義;那麼當收集準備就緒時,您可以在頁面上放置東西。使用CoffeeScript很少需要_.bindAll @。您應該使用=>來創建相關方法。

+0

不重置清空集合?我不明白我該如何使用它。 – alste 2012-02-12 03:05:19

+0

@alste:'reset'也是一個集合觸發的事件:http://documentcloud.github.com/backbone/#FAQ-events – 2012-02-12 03:11:37