2011-07-17 8 views
1

バックボーンを学ぶのにまだ苦労しています。現在、私のバックボーンコレクションで.fetch()と呼んだ後で、未知の報告されていないエラーが発生しているため、私の意見はまったくレンダリングされません。これはアプリケーションのどの場所からでも行うことができるので、すべてのファイルを表示するための要点を設定しました。コレクションのBackbone.js fetch()での問題

Link to all the code.

ビュー内のコメントが発生しているエラーを説明し、また、(単純にシナトラ+ Redisの場合)、サーバからの応答べきです。 /schoolsの応答は[{"name":"Foo"},{"name":"Bar"}]ですが、なぜこのエラーが発生するのかわかりません。ルーターにnew window.fooViewを作成しても、何らかの理由で私のビューが初期化されることはありません。誰か助けてくれますか?ありがとう!

答えて

1

あなたのビューのrenderメソッドを決して呼び出さないように見えます。 router.js 8行目またはindex.js initialize 12行目でこれを明示的に行う必要があります。initializeの後に自動的にビューをレンダリングする人もいますが、デフォルトのバックボーンではいつでも明示的に行うことができます。あなたのschools.bindはSUBSEQUENT変更のためにこれを行いますが、コードが実行される方法、イベントを発生させる学校をフェッチしてからビューを作成してバインドするので、ビューがバインドされるまでにイベントは発生しませんしたがって、renderは呼び出されません。実際の例は確実にデバッグするのが簡単ですが、それは要点を読むことで私の推測です。

+0

したがって、_.bind( 'all'、render)は完全に役に立たないですか?私はビューオブジェクトが推測されるたびに(この場合、ルータの 'new window.fooView'で)レンダリングメソッドを呼び出すと考えました。それをバインドするのではなく、(new window.fooView.render'を実行するのではなく)initializeから直接呼び出すだけでよいでしょうか? – Jason

+0

いいえ、全く役に立たないわけではありません。コレクションを変更した場合(フェッチを再度呼び出す、または追加/削除を行う場合など)、ビューがレンダリングされますが、問題はコードが実行されている順序です。フェッチはあなたが束縛される前に呼び出されるので、1になります。2.呼び出されたフェッチ2.コレクションイベントfire 3.コレクションイベントにバインドしますが、それらはすでに起動されているので、すぐに何も起こりません。ビュー・オブジェクトを作成した後にフェッチ・コールをrouter.js 'index'に移動すると、フェッチ・コールが機能するようになります。どちらかというと、最初に明示的に 'render'を呼び出します。 –

+0

ここには良い例があります:http://www.jamesyu.org/2011/02/09/backbone.js-tutorial-with-rails-part-2/彼が彼の最後に 'render'を呼び出す方法に注目してください'initialize'メソッドです。 –

関連する問題