2011-12-23 60 views
0

這是我的代碼。隨時告訴我我做錯了什麼或者是對的。我試圖將所有內容存儲在PhishVids對象中。如果這是做錯事的方法,請告訴我。在View中爲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中你有'#show-template',模板中id是'show_template'。 – kubetz 2011-12-23 02:08:29

+0

你是對的,謝謝。但是這並不能完全解決我的問題。 – switz 2011-12-23 02:12:19

回答

1

我可以在這裏看到了一些問題。在沒有看到調用代碼的情況下,您的JSON的一個例子,並且更多地瞭解您正在嘗試做什麼,這是不可能知道您實際在做什麼的。但是,我注意到幾件事情:

1)當您獲取集合時,集合將從它接收的數據(應該是一個對象數組)中創建模型實例。它將使用this.model作爲類型,但是你有沒有定義應該是什麼樣的模式?

2)無論你的模型和你的收藏有兩種urlurlRoot成員這會告訴他們如何獲取

3)在您的視圖對象中,您的初始化函數(在構造對象後立即調用)引用了this.model,該函數未在任何地方設置,因此未定義。

通常,如果您要使用像這樣的事情,你應該首先實例化集合(new object())然後調用。 fetch()獲取數據。 fetch()可以接受一個成功和錯誤的對象作爲回調,或者它返回一個jQuery的延期對象(如果你使用的是jQuery),你可以使用.done(..)和.fail(..)來找出什麼時候它完成了。

然後,您可以將模型作爲選項(對象的一部分)傳遞到新的... View({model:model_you_want})等中,並使用它進行渲染。

希望可以幫到

+0

取回返回成功,但「完成」和「失敗」都是空的。 – switz 2011-12-23 02:58:21

+0

你可能要麼沒有使用jQuery,要麼沒有使用足夠新的jQuery版本。使用jQuery(current ver).fetch()將返回一個延遲對象,因此collectObj.done(function(){/ *在這裏您可以使用collectObj * /})。fail(function(err){/ * here you handle an錯誤* /});將工作 – taxilian 2011-12-23 03:10:28

+0

我正在使用jQuery 1.7.1 – switz 2011-12-23 06:39:07