2011-12-23 12 views
0

ここに私のコードです。私が間違っていることや正しいことを教えてください。私はPhishVidsオブジェクトにすべてを格納しようとしています。これが間違ったやり方であれば教えてください。Backbone.jsのビューでJSONデータを取得

JSONは/shows/YEAR.jsonに保存されています。年は1987年から2011年までの範囲です。私はJSONを読み込むことができないので、誰かが正しい方向に私を指すことができますか?

var PhishVids = { 
    Models: { 
     Show: Backbone.Model.extend({ 
      defaults: { 
       showid: 'show id', 
       year: 'year', 
       month: 'month', 
       day: 'day', 
       venue: 'venue' 
      } 
     }) 
    }, 

    Views: { 
     Show: Backbone.View.extend({ 
      el: $('#content'), 
      initialize: function() { 
       this.model.fetch(); 
       this.model.bind('change', this.render, this); 
      }, 
      render: function(event) { 
       var compiled_template = _.template($("#shows-template").html()); 
       this.el.html(compiled_template(this.model.toJSON())); 
       return this; //recommended as this enables calls to be chained. 
      }, 
      events: { 
       "click .show": "showClick" 
      }, 
      showClick: function(event) { 

      } 
     }) 
    }, 

    Collections: { 
     ShowList: Backbone.Collection.extend({ 
      parse: function(response) { 
       return response.items; 
      } 
     }) 
    } 

}; 

表示テンプレート:

<script type="text/template" id="shows_template"> 
    <a href='/<%= year %>/<%= month %>/<%= day %>' class='show <%= month %> <%= day %>' id='<%= showid %>'><%= month %>/<%= day %></a> 
    <div class='venue'><%= venue %></div> 
</script> 
+0

JSでは '#shows-template'があり、テンプレートには' show_template'があります。 – kubetz

+0

あなたは正しいです、ありがとう。しかし、それは私の問題を完全には解決しません。 – switz

答えて

1

私はここでいくつかの問題を見ることができます。あなたのJSONの例である呼び出しコードを見ずに、あなたがしようとしていることについてもう少し知っていれば、実際に何をしているのかを知ることは不可能です。しかし、ここに私がすぐに気づくいくつかの事があります:

1)コレクションは、受け取ったデータからモデルインスタンスを生成します(オブジェクトの配列でなければなりません)。お使いのモデルでもあなたのコレクションのいずれもが

をフェッチするためにそれらをどのように言うだろうurlまたはurlRootメンバーのいずれかを持っている)これは、タイプとしてthis.modelを使用しますが、あなたはどうあるべきかのモデル定義していない...

2 3)ビューオブジェクトでは、初期化関数(オブジェクトの作成直後に呼び出される)はthis.modelを参照します。this.modelはどこにも設定されていないため未定義です

一般的には、このようなものは、最初にコレクション(新しいオブジェクト())をインスタンス化してから呼び出す必要があります。 fetch()を使用してデータを取得します。 fetch()はコールバックとして成功とエラーのあるオブジェクトを受け入れるか、jqueryを使用している場合は.done(..)と.fail(..)を使用して、それは終わった。

次に、オプション(オブジェクトの一部)としてモデルをnew ... View({model:model_you_want})などに渡してレンダリングすることができます。

希望する

+0

返された成功をフェッチしますが、 'done'と' fail'は両方とも空です。 – switz

+0

あなたはおそらくjqueryを使用していないか、または新しい十分なバージョンのjQueryを使用していないでしょう。 jQuery(現在のver)では.fetch()は遅延オブジェクトを返しますので、collectObj.done(function(){/ *ここではcollectObj * /}を使用できます)fail(function(err){/ *ここでは、エラー* /}); – taxilian

+0

私はjQuery 1.7.1を使用しています – switz

関連する問題