是否可以在两个 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
将是正在侦听的视图。
如果我在一个页面上有两个视图,我如何才能在一个视图中使用 $.trigger() 触发事件并在另一个视图中捕获该事件?
如果您依赖 DOM 事件在您的视图之间进行通信,那么您 运行 如果您在 DOM 事件后更改应用程序的结构,它会停止工作的风险只在树上向上冒泡。
为两个视图都可以访问的整个应用程序提供专用事件通道会更容易。
Backbone 附带了一个 event 实现,您可以使用它。
事件频道:
var eventChannel = _.extend({}, Backbone.Events);
view1:
this.listenTo(eventChannel, 'myEvent', function(args) { ... });
view2:
eventChannel.trigger('myEvent', ...);
你可以在调用trigger
时攻击事件的数据,它会被传递给事件处理程序。通过使用 listenTo
,您允许视图跟踪其侦听器,以便在删除视图时可以清除它们。回调函数将以侦听器作为上下文调用,因此在回调中 this
将是正在侦听的视图。