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