2013-02-22 358 views
0

我試圖執行我的視圖的渲染方法,但由於某種原因它告訴我Uncaught TypeError: Cannot call method 'listenTo' of undefined,不太清楚爲什麼。listenTo not firing event

var App = Backbone.View.extend({ 
    current_election_index: 0, 
    el: 'body', 
    initialize: function() { 
     elections = new Elections(); 
     _.bindAll(this, 'render'); 
     this.listenTo(this, 'change', this.render); 
     elections.fetch(); 
/*  elections.fetch({ 
      success: function(test) { 
       console.warn(this.App.render()); 
       this.render(); 
      }*/ 

     // }); 
    }, 

    render: function() { 
     console.log('this is the render method'); 
     var view = new ElectionView({model: elections.at(0)}) 
    } 
}) 
+0

你有最新的Backbone嗎? listenTo是一個相當新的增加。另外,我認爲你希望你的聲明可以這樣說:this.listenTo(this.model,'change',this.render); – 2013-02-22 16:17:35

+0

我確實有一個Backbone(良好調用)的舊版本,我確實將此更改爲this.model,但現在它抱怨'未捕獲的TypeError:無法讀取未定義的屬性'_listenerId',如果我像之前一樣保留它,事件仍然不會觸發 – alexdmejias 2013-02-22 16:28:39

+0

那麼,這是告訴我你的觀點沒有模型。你在聽什麼活動?選舉?所以也許this.listenTo(選舉,「重置」,this.render)? – 2013-02-22 16:55:09

回答

0

你想要做的就是聽elections。因此,而不是聽this.modelthis

this.listenTo(elections, 'reset', this.render); 

reset觸發對集合「的時候,收集的全部內容已被取代」。在模型「模型屬性發生變化時」觸發change事件。有關更多信息,請參閱Backbone Catalogue of Events

如果要在屬於elections集合的每個模型更改時更新視圖,請務必在每個ElectionView子視圖中執行此操作,而不是在App視圖中執行此操作。