我有一个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
以他们应该的方式工作,那么我就不必处理这个问题。< / p>
答案 0 :(得分:0)
尝试:
childEvents: {
"next:question": this.showNextQuestion,
}
或者看看你是否有更好的运气triggerMethod
events: {
"click #next":function(e){
this.triggerMethod("next:question")
}
}
然后在您的布局中有一个名为onChildviewNextQuestion
答案 1 :(得分:0)
http://marionettejs.com/docs/v2.4.5/marionette.layoutview.html#layoutview-childevents
如文档中所述,您应该在子视图中使用triggerMethod
,而不是trigger
!
childEvents还捕获子视图触发的自定义事件。采取 请注意,childEvents处理程序的第一个参数是子项 看待自己。警告:通过子视图触发的事件 LayoutView childEvents尚不支持this.trigger。使用 在子视图中严格触发方法。