У меня есть этот код http://jsfiddle.net/QRcF5/2/
$(function() {
var Header = Backbone.Marionette.ItemView.extend({
template: _.template('<h4>TEST</h4><button>EDIT</button>'),
tagName: 'nav',
triggers: {
'click button': 'btn_clicked'
}
}),
Layout = Backbone.Marionette.Layout.extend({
template: _.template('<header></header>'),
regions: {
header: 'header'
},
events: {
'itemview:btn_clicked': 'clicked'
},
clicked: function() {
alert('Ana are mere');
}
});
layout = new Layout();
$('body').append(layout.render().el);
layout.header.show(new Header());
});
Я использую макет с одним ItemView (позже я хочу более сложную вложенность) и хочу зафиксировать в LAYOUT событие, которое происходит в ITEMVIEW. Кажется, что он не пузырится вверх или я делаю что-то не так.
ОБНОВЛЕНИЕ 1. Я пробовал события, триггеры (для дочернего элемента) и события (для родителя), но я все еще не могу поймать событие внутри родителя.
Я могу использовать:
_.extend(App.vent, Backbone.Events);
Backbone.Marionette.ItemView.extend({
....
App.vent.trigger('btn_clicked');
....
});
Backbone.Marionette.Layout.extend({
....
App.vent.on('btn_clicked', function() { doCoding(); });
....
});
Но таким образом я нарушаю инкапсуляцию. Есть ли способ сохранить инкапсуляцию с помощью событий триггеров Marionette и сохранить все это в макете, а не загрязнять все приложение?
ОБНОВЛЕНИЕ 2
Я обновил jsfiddle, чтобы использовать _.extend(vent, Backbone.Events). Если у кого-то есть лучший шаблон для этого, сообщите нам: D