2016-05-03 39 views
0

我有一個處理顯示它自己的孩子的LayoutView。根據文檔,我可以將childEvents對象擴展爲自動偵聽在其子視圖上觸發的任何事件。Marionette 2.4.4 LayoutView的childEvents不會觸發?

這根本不適合我。任何人都可以發現我可能做錯了什麼嗎?

Show.QuizLayout = Marionette.LayoutView.extend({ 
    template:_.template("<h3><%= title %></h3><div id='quiz'></div>"), 
    regions: { 
     card: "#quiz", 
    }, 
    childEvents: { 
     "next:question": "showNextQuestion", 
    }, 
    showNextQuestion:function() { 
     //I NEVER GET CALLED!!! 
    }, 
    onShow:function(){ 
     var v = new Show.QuizCard(); 
     this.showChildView('card',v) 
}); 

Show.QuizCard = Marionette.ItemView.extend({ 
    className: "quizcard", 
    template: _.template("<div class='card' id='next'>Next</div>"), 
    events: { 
     "click #next":function(e){ 
      this.trigger("next:question") 
     } 
    }, 
}); 

我已經通過設置v.on("next:question", function(){...})解決此得到,但它創造克魯夫特我寧願沒有處理,如果我能得到childEvents工作他們應該的方式。

+0

我知道它們只是在2.4.0版本中添加的,並且標題在3.x, – mix3d

回答

0

http://marionettejs.com/docs/v2.4.5/marionette.layoutview.html#layoutview-childevents

的方法,在注意該文件,你笑在您的子視圖中使用triggerMethod,而不是trigger

childEvents還捕獲由子視圖觸發的自定義事件。以 請注意,childEvents處理程序的第一個參數是子視圖 。警告:通過 this.trigger在子視圖上觸發的事件尚不支持LayoutView childEvents。在子視圖內嚴格觸發方法使用 。

+0

那麼可能會這樣做。我最好更多地閱讀文檔,顯然!會試試這個。 – mix3d

0

嘗試:

childEvents: { 
    "next:question": this.showNextQuestion, 
} 

或者看看是否有更好的運氣與triggerMethod

events: { 
    "click #next":function(e){ 
     this.triggerMethod("next:question") 
    } 
} 

然後在你的佈局已呼籲onChildviewNextQuestion

+0

更改爲'childViewEvents'我很確定我已經嘗試了第一個。我嘗試了文檔中例子的各種排列,以及使用簡單的'console.log()'來檢查它是否會觸發的匿名函數 – mix3d