我有两个视图, aMainView
和 a ChildView
。在实例ChildView
外部配置和MainView
实例化并注入到MainView
. 由于该方法,它MainView
显示了ChildView
渲染的时间onRender
。
我遇到的问题是,如果第二次MainView
渲染,则所有事件侦听器都会被杀死。仍然显示在第二次渲染中,但是它不响应用户事件(如鼠标点击)。甚至没有它自己的事件。ChildView
ChildView
var MainView = Marionette.Layout.extend({
regions: {
'menu': '.menu'
},
template: "#sample-template",
onRender: function() {
this.menu.show(this.options.menuView);
}
});
var ChildView = Marionette.ItemView.extend({
template: '#menu-template',
triggers: {
'click .js-click-me': 'clicked'
},
onClicked: function() {
alert('the button was clicked...');
}
});
// Where the view is used and displayed in a main app region:
var model = new Backbone.Model({
contentPlacement: "here"
});
var childView = new ChildView({
model: model
});
var view = new MainView({
model: model,
menuView: childView
});
this.region.show(view);
// A 2nd render kills event listeners in the childView
// Remove this line, and it will work again...
view.render();
我有一个jsfiddle可以证明这一点。如果您注释掉第 2render
行(第 65 行),您会发现ChildView
do 上的事件实际上是有效的。
防止这种情况发生的最好方法是什么?有没有更好的方法来配置一个视图并将其注入到 Marionette 中的另一个视图中?