Backbone Marionette Event Aggregator:如何在App级别收听ItemView事件

pea*_*ion 5 marionette

我是Marionette的新手,无法理解事件......

我有一个触发事件的ItemView,我希望在应用程序级别收到此事件,但是当我的应用程序监听此事件时,没有任何反应......

如果Event Aggregator在Application和ItemView中,为什么这段代码不起作用?:

var MessageItemView = Backbone.Marionette.ItemView.extend({
  template: "#messagesTPL",
  tagName: 'tr',
  className: 'messageItem',
  events : {
    'click': 'displayMessage'
  },
  displayMessage: function () {
    this.trigger('display:message');
  }
});

App.on('display:message', function () {
  console.log('display message !!!');
});
Run Code Online (Sandbox Code Playgroud)

Dav*_*ulc 4

如果要在应用程序级别监听事件,则必须在应用程序级别触发它:

displayMessage: function () {
  myApp.trigger('display:message');
}
Run Code Online (Sandbox Code Playgroud)

假设myApp是您的 Marionette 应用程序。然后,您只需监听该事件:

myApp.on('display:message', ...)
Run Code Online (Sandbox Code Playgroud)

这是实现您所要求的唯一方法:“我有一个触发事件的 ItemView,并且我希望在应用程序级别接收此事件”。根据您的情况,更好的方法是

这两种解决方案都不需要“污染”全局事件空间。