2013-10-15 70 views
0

我在使用Marionette的CompositeView時遇到了問題。我使用模板在我的CompositeView中渲染模型,並希望爲其添加一個單擊事件。不知何故,我無法使用CompositeView上的events: { "click": "function" }處理程序來使事件工作......我做錯了什麼?Marionette的CompositeView事件沒有觸發

var FactsMenuItem = Backbone.Marionette.ItemView.extend({ 
    template: tmpl['factsmenuitem'], 

    initialize: function() { 
     console.log('factsmenuitem'); 
    }, 

    onRender: function() { 
     console.log('factsmenuitem'); 
    } 

}); 

var FactsMenuView = Backbone.Marionette.CompositeView.extend({ 
    template: tmpl['factsmenu'], 

    itemView: FactsMenuItem, 

    itemViewContainer: ".subs", 

    events: { 
     'click': 'blaat' 
    }, 

    blaat: function() { 
     console.log('this is not working'); 
    }, 

    initialize: function() { 
     this.model.get('pages').on('sync', function() { 
      this.collection = this.model.get('pages'); 
      this.render(); 
     }, this); 
    }, 

    onRender: function() { 
     console.log('render factsmenu'); 
    } 

}); 


var FactsLayout = Backbone.Marionette.Layout.extend({ 

    template: tmpl['facts'], 

    regions: { 
     pages: ".pages", 
     filter: ".filter", 
     data: ".data" 
    }, 

    initialize: function(options) { 
     this.currentPage = {}; 

     this.factsMenu = new FactsMenu(); 
     this.factsView = new FactsMenuView({model: this.factsMenu}); 
    }, 

    onRender: function() { 
     this.pages.show(this.factsView); 
    } 

}); 

編輯: 我刪除了一些代碼,提出的問題不清楚...

問題在於,該CompositeView中(模型視圖??)的非的CollectionView的事件不是被解僱。我認爲這與FactsLayoutView實例化複合視圖的方式有關...

回答

1

問題是由區域渲染的方式引起的。在我的FactsLayout使用此代碼:

initialize: function(options) { 
    this.currentPage = {}; 

    this.factsMenu = new FactsMenu(); 
    this.factsView = new FactsMenuView({model: this.factsMenu}); 
}, 

onRender: function() { 
    this.pages.show(this.factsView); 
} 

顯然,你不能顯示在的OnRender功能的圖......我不得不改變FactsLayout被初始化的方式:我

var layout = new FactsLayout({ 
    slug: slug 
}); 
layout.render(); 

var factsMenu = new FactsMenu({ slug: slug }); 
var factsView = new FactsMenuView({model: factsMenu}); 

layout.pages.show(factsView); 
0

也許我沒有很好地理解你的問題,但是如果你需要聽從複合視圖中的項目視圖觸發的事件,你應該做如下所示。

在項目視圖test方法中。

this.trigger("test"); 

在複合視圖initialize方法中。

this.on("itemview:test", function() { }); 

注意,當一個事件從CollectionView的項目(一CompositeViewCollectionView)發射,它是由itemview前綴前綴。

希望它有幫助。

編輯:讀你的問題又一次,我認爲這不是正確的答案,但是,關於你的問題,我猜合成視圖中的點擊被項目視圖捕獲。你能更好地解釋你的目標嗎?

+0

抱歉不清楚......問題不是關於項目視圖中的事件(那些正在工作......),而是關於CompositeView上的事件(在事實菜單模板中......) – thomasjonas

+0

@thomasjonas可以發佈一些你的模板的詳細信息?謝謝 –

+0

非常抱歉,遲到的回覆很可笑。事實證明,頁面區域呈現/顯示的方式有些事情要做(參見我的回答)。 – thomasjonas