Javascript 重新渲染后的木偶项视图事件

Javascript 重新渲染后的木偶项视图事件,javascript,backbone.js,marionette,Javascript,Backbone.js,Marionette,我第一次玩木偶。 重新呈现ItemView后,不会触发其事件。 简单的例子: App = new Marionette.Application; App.addRegions({ headerRegion: '#header', contentRegion: '#content', }); App.addInitializer(function () { this.Views = { MainMenu : new MainMenuView(),

我第一次玩木偶。 重新呈现ItemView后,不会触发其事件。 简单的例子:

App = new Marionette.Application;

App.addRegions({
    headerRegion: '#header',
    contentRegion: '#content',
});

App.addInitializer(function () {
    this.Views = {
        MainMenu : new MainMenuView(),
        ContentOne : new ContentOneView(),
        ContentTwo : new ContentTwoView(),
    };
});

App.addInitializer(function () {
    var self = this;
    var eva = self.vent;
    eva.listenTo(self.Views.MainMenu, 'content1', function () {
        self.contentRegion.show(self.Views.ContentOne);
    });
    eva.listenTo(self.Views.MainMenu, 'content2', function () {
        self.contentRegion.show(self.Views.ContentTwo);
    });
});

App.on('start', function () {
    var self = this;
    self.contentRegion.show(self.View.ContentOne);
});

App.start();
重新呈现ContentOneView和ContentTwoView后,不会触发它们的事件。
我做错了什么?

您遇到的问题是
区域。show()
将关闭当前占用该区域的任何视图。这样做将取消对视图事件的委派。在初始的
region.show()之后,您应该在视图上手动调用render


您可以看到和一个问题。

不要使用eva来侦听视图上发生的事件,而是尝试侦听其他视图传递的事件的eva

App.addInitializer(function () {
    var eva = self.vent;
    var self = this;
    this.listenTo(eva, 'someStringHere', function(){/*do stuff here*/};
});
然后在您的视图中,您可以通过eva/vent触发事件

var eva = self.vent;
eva.trigger("someStringHere");

当视图显示在布局中时,我通过委派事件来解决此问题:

layoutView.content.show(contentView);
contentView.delegateEvents();

虽然这仅在Andrew Hubbs提到的第一次渲染之后才有必要,但我尝试使用
self.View.ContentOne.render()
,而不是
self.contentRegion.show(self.View.ContentOne)
,但没有任何结果。例如:每个ContentView本身都有一个按钮,以及该按钮的事件。第一次正常触发所有事件,但第二次重新渲染后,未触发按钮的事件。