2012-02-12 9 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])

をフェッチします。オプションのハッシュは、(collection, response)が引数として渡されるsuccesserrorコールバックをとります。モデルデータがサーバーから返されると、コレクションはリセットされます。

コールがサーバーから戻ってくる前に、console.log languages.modelsが呼び出されていることが原因です。

だからあなたrenderがより次のようになります。

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

あなたのコンソール上で何かを得る必要があること。

それはinitializelanguages.fetchを呼び出し、コレクションのresetイベントに@renderをバインドする方が理にかなって。コレクションが準備できたら、ページに物を置くことができます。

また、CoffeeScriptでは_.bindAll @はほとんど必要ありません。関連するメソッドを=>で作成する必要があります。

+0

コレクションを空にリセットしませんか?私はそれをどのように使うことができないのか分かりません。 – alste

+0

@alste: 'reset'はコレクションがトリガーするイベントです:http://documentcloud.github.com/backbone/#FAQ-events –