是否可以在两个 backbone 视图中触发事件?

Is it possible to trigger an event across two backbone views?

如果我在一个页面上有两个视图,我如何才能在一个视图中使用 $.trigger() 触发事件并在另一个视图中捕获该事件?

如果您依赖 DOM 事件在您的视图之间进行通信,那么您 运行 如果您在 DOM 事件后更改应用程序的结构,它会停止工作的风险只在树上向上冒泡。

为两个视图都可以访问的整个应用程序提供专用事件通道会更容易。

Backbone 附带了一个 event 实现,您可以使用它。

事件频道:

var eventChannel = _.extend({}, Backbone.Events);

view1:

this.listenTo(eventChannel, 'myEvent', function(args) { ... });

view2:

eventChannel.trigger('myEvent', ...);

你可以在调用trigger时攻击事件的数据,它会被传递给事件处理程序。通过使用 listenTo ,您允许视图跟踪其侦听器,以便在删除视图时可以清除它们。回调函数将以侦听器作为上下文调用,因此在回调中 this 将是正在侦听的视图。