2013-10-28 49 views
0

我正在編寫具有三個類似子佈局的Marionette佈局。他們每個人都是同一個班級的一個實例。下面的代碼:Marionette.Backbone.js集合onRequest調用所有實例

Marionette.Layout.extend({ 
     subCollection1: new SubCollection(), 
     subCollection2: new SubCollection(), 
     subCollection3: new SubCollection(), 

     initialize: function() { 
      this.subView1 = new subView ({ 
       collection: this.subCollection1) 
      }); 
      this.subView2 = new subView ({ 
       collection: this.subCollection2) 
      }); 
      this.subView1 = new subView ({ 
       collection: this.subCollection3) 
      }); 
     }, 

     onRender: function() { 
      this.Reg1.show(this.subView1); 
      this.Reg2.show(this.subView2); 
      this.Reg3.show(this.subView3); 
     }, 

     fetchColletions: function() { 
      this.subCollection1.fetch({ data: { /* some data for webserver */ } }); 
      this.subCollection2.fetch({ data: { /* some data for webserver */ } }); 
      this.subCollection3.fetch({ data: { /* some data for webserver */ } }); 
     } 
}); 

然後在我的subLayout我綁定功能,收集請求在初始化函數是這樣的:

Marionette.Layout.extend({ 
     onCollectionRequest: function() { 
      console.log('summary.onCollectionRequest ' + this.cid); 
      //debugger; 
     }, 

     initialize: function() { 
      this.listenTo(this.collection, 'request', this.onCollectionRequest); 

     } 
    }); 

時,要求獲取任何這些藏品的問題觸發請求事件在所有三個集合,所以我得到記錄是這樣的:

fetchcollections

GET/*服務器URL */200 OK 157ms

onCollectionRequest view15

onCollectionRequest view24

onCollectionRequest view33

GET/*服務器URL */200 OK 332ms

onCollectionRequest view15

onCollectionRequest view24

onCollect ionRequest view33

/*等了第三個*/

我缺少的東西?我一直認爲事件綁定是每個實例不是每個類。我應該如何解決這個問題?

P.S.我的代碼被包含在require.js define()中,但我認爲這對我的問題沒有意義,所以我在代碼片段中省略了它。

+0

您的fetchCollections方法觸發三個集合的提取。我不明白爲什麼你會驚訝,如果事件在所有這些事件中被觸發 – ejosafat

+0

看看我的帖子末尾的日誌。我很驚訝,因爲他們每個人都被觸發了三次。每次抓取一次。如果我刪除了subcollection2.fetch和subcollection3.fetch,它仍然會調用所有三個事件。 –

+0

您是否創建第一個佈局的多個實例? – martin

回答

0

嗯,我已經解決了我的問題。事實證明,我在我的App初始化器中做了一件非常糟糕的事情。爲了讓我用「上」函數原型全局取回錯誤處理程序:

Backbone.Collection.prototype.on('error', fetchErrorHandler); 

也如How to add a default error handler to all Backbone models?說,它是一個壞主意,東陽它在應用程序中所有收集實例創建全局事件處理程序。它導致每個事件處理程序對於所有集合都很常見,這是我的問題。

相關問題