木偶2.4.4 LayoutView的childEvents没有开火?

时间:2016-05-03 17:08:18

标签: javascript marionette

我有一个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>

2 个答案:

答案 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。使用   在子视图中严格触发方法。