2012-04-24 5 views
0

私はNode.js/Express/Jade/Backbone.jsを使いこなし、ポーカートーナメントを記録する簡単なWebアプリケーションを試して、いくつかのJavaScriptブックを勉強しています私の初心者のJSスキルを向上させ、前述の技術を学び、まともなポーカーアプリを同時に作ります。Backbone.js .reset()データのブートストラップに失敗する

(function ($) { 
    window.Tournament = Backbone.Model.extend({}); 

    window.Tournaments = Backbone.Collection.extend({ 
     model: Tournament, 
     url: '/tournaments' 
    }); 

    window.tournaments = new Tournaments(); 

    // I removed this line once I attempted to bootstrap the data. 
    window.tournaments.fetch(); 

    window.TournamentView = Backbone.View.extend({ 
     tagName: 'tr', 
     className: 'tournaments', 

     initialize: function() { 
      _.bindAll(this, 'render'); 
      this.model.bind('change', this.render); 
      this.template = _.template($("#tournament-template").html()); 
     }, 
     render: function() { 
      var renderedContent = this.template(this.model.toJSON()); 
      $(this.el).html(renderedContent); 
      return this; 
     } 
    }); 

    window.TournamentsView = Backbone.View.extend({ 
     initialize: function() { 
      _.bindAll(this, 'render'); 
      this.collection.bind('reset', this.render); 
     }, 
     render: function() { 
      $(this.el).html($("#tournaments-template").html()); 
      (this.collection).each(function(tournament) { 
       var view = new TournamentView({ 
        model: tournament, 
        collection: this.collection 
       }); 
       $("#tournaments").append(view.render().el); 
      }); 
      return this; 
     } 
    }); 

    window.BackboneTournaments = Backbone.Router.extend({ 
     routes: { 
      '': 'tournaments' 
     }, 
     initialize: function() { 
      this.tournamentsView = new TournamentsView({ 
       collection: window.tournaments 
      }); 
     }, 
     tournaments: function() { 
      $("#container").empty(); 
      $("#container").append(this.tournamentsView.render().el); 
     } 
    }); 

    $(function() { 
     window.App = new BackboneTournaments(); 
     Backbone.history.start({}); 
    }); 

})(jQuery); 

これは完璧に動作します:これは私がこれまでのところ、ウェブとPeepCodes最初BACKBONE.JSスクリーンキャストを中心にさまざまなソースを使用して(私はバックエンドのAPIとして設定のNode.jsている)しているコードです。ポーカートーナメントのポピュレートテーブルがあるページがあります。しかし、データをブートストラップして、ページがロードされた後にフェッチしないようにした後(そして、未使用のテーブルを数秒間表示する)、それはもはや機能しません。私は、Backbone.jsで使用されているコンテナ(#container)の直後に、アプリケーションの1ページ(app.jade、Jadeテンプレート)の本文に次のコードを入れて、windows.tournaments.fetch( );上記のコードからの行。

script(type="text/javascript") 
    tournaments.reset(!{JSON.stringify(tournies)}); 

tourniesオブジェクトは、それをレンダリングNode.jsのルートからジェイドテンプレート(app.jade)に渡されます。 Firebugを使用すると、reset()関数がJSON形式のデータを正常に取得していて、テーブルがBackboneによって作成されていることがわかりますが、データは移入されません。問題が何であるかについて私は全くの手がかりがないので、どんな助けもありがたい。また、前に投稿していないので、私の質問の構造に間違いを犯した場合、私はお詫び申し上げます。私が持っているならば、私に知らせてください。私の第二は、あなたがJSONデータを調べる必要があるということです

$(document).ready(function(){ 
    tournaments.reset(!{JSON.stringify(tournies)}); 
}); 

+0

はどのように 'tournaments.reset({JSON.stringify(tournies):

あなたのコード上の注意点、あなたはこのようなスキーマを使用して、モジュールパターンと名前のものを使用する必要があり、より良いあなたのコードを整理します}) 'あなたに何かのエラーを渡しませんか? –

+0

私は分かりません。それは私にエラーを渡すべきですか?私は、http://dailyjs.com/2011/04/04/node-tutorial-19/とhttp://documentcloud.github.com/backbone/#FAQ-bootstrapからデータをブートストラップするための特定のリファレンスをまとめています。私は自分のトーナメントコレクションでresetメソッドを実行し、トーナメントに対応するJSONオブジェクトの配列を渡しています。 –

+0

それはJavaScriptではなくJadeテンプレートにありますか?それを明確にしたいかもしれません。 –

答えて

2

私の最初の推測では、これを試してみてください、あなたはスクリプトを実行するとき、文書の準備ができていないこと、でしょう。コンソールに行って、トーナメントのいくつかを手作業でコレクションに追加して、結果が何であるかを調べてください。多分、解析中に何らかのエラーがあります。 !http://ricostacruz.com/backbone-patterns/#namespace_convention

+0

素敵ですが、$(document).readyで完璧に動作します。助けてくれてありがとう。私はdocument.readyを使うことが知られていたはずだったので、それほど簡単ではないことに幾分苛立っています。 = /また、最初のPeepcode Screencastのコンベンションに従っていただけです。私はそれがなぜそのように行われたのか本当に分かりません。まだ学んでいる。 Backbone Patterns Namespace Convertionへのリンクをありがとう。それは、サイト自体全体が、かなり有益であり、有用であるように見えます。 –

+0

偉大な、楽しんで開発している:) –

関連する問題