2016-05-03 6 views
0

У меня есть LayoutView, который показывает свои собственные дети. Согласно документации, я могу расширить объект childEvents, чтобы автоматически прослушивать любые события, вызванные его дочерними представлениями.Marionette 2.4.4 Дети-макеты LayoutView не стреляют?

Это не работает для меня вообще. Может ли кто-нибудь определить, что я могу делать неправильно?

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, и название было изменено на 'childViewEvents' в 3.x, – mix3d

ответ

0

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

Как отмечалось в документы, вы должны использовать triggerMethod в вашем детском видении, а не trigger!

childEvents также ловит специальные мероприятия, выпущенные детским видом. Возьмите Обратите внимание, что первым аргументом обработчика childEvents является дочерний объект . Внимание: события, инициированные на детском просмотре через this.trigger пока не поддерживаются для LayoutView childEvents. Используйте строго triggerMethod в дочернем представлении.

+0

Хорошо, что, вероятно, это сделает. По-видимому, мне лучше читать документы. Попробуй это. – mix3d

0

Try:

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

Или если у вас есть лучшая удача с triggerMethod

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

Тогда в макете есть метод под названием onChildviewNextQuestion

+0

. Я почти уверен, что попробовал первый. Я попытался выполнить различные перестановки в примерах в Документации, а также анонимную функцию с помощью простого 'console.log()', чтобы проверить, будет ли это срабатывать. – mix3d