2013-02-22 125 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视图中执行此操作。