2013-06-30 61 views
0

我有两个集合People and Teams。主干听众事件不起作用

我希望Teams集合可以侦听是否有人添加到People集合中。

不过,我不断收到此错误: 遗漏的类型错误:无法读取属性“_listenerId”的未定义

也许我误解绑定和listenTo的概念?以下是我用于这两个集合的代码。

 var People = Backbone.Collection.extend({ 

      url: '/people', 

      model: Person, 

      comparator: 'id', 

      initialize: function() { 

       //Why does this return '_listenerID of undefined' 
       this.bind('add', function() { 
        var teams = new Teams; 
        teams.render; 
       }); 

      }, 

     }); 


     var Teams = Backbone.Collection.extend({ 

      url: '/team', 

      model: Team, 

      comparator: 'id', 

      initialize: function() { 

       this.listenTo(People.collection, 'add', this.render); 

      }, 

      render: function() { 

       console.log("POOP") 

      } 

     }); 
+1

'console.log(“POOP”)'我以为我是唯一一个... – Trip

回答

5

你的确误解了听众的工作方式。你应该特别听某个对象(即一个类的一个实例)。

这里主干尝试访问Backbone对象的私有属性listenerId做一些内部绑定的东西。在你的情况下,它试图获得People.collection._listenerIdPeople是你的班级,它没有任何collection属性,所以People.collection是未定义的,因此你的错误。

这些是你的问题的基础知识。由于没有完全了解你们班级之间的联系以及你们想要做什么,我现在不会再进一步​​了。

+0

啊好吧。恩,好吧,所以我需要听一堂课的实例......不只是一般的班级? – veryrarecandy

+1

另外,我现在明白'People'没有'collection'属性。但是,如果我创建了'var people = new People','people.collection'将起作用。 – veryrarecandy

+0

得到它现在的工作:)我感到困惑,因为我看到有人调用'this.model'的其他代码 - 我想我必须在调用集合时一样具体,因此使用'People.collection ' - 但搞清楚Backbone是否比我更聪明:p – veryrarecandy