2013-06-30 109 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