我有playerWrapper
模型触发playing
事件,如下所示:
playerWrapper.trigger('playing')
然后,在名为popupView
的单独窗口视图中,我在initialize
上收听该事件:
this.listenTo(playerWrapper, 'playing', function() {
doSomething()
});
我的应用程序的一个特点是它是一个chrome扩展,分为两个 windows ,一个弹出窗口和一个后台窗口。它们使用chrome运行时方法相互通信。我遇到的问题是每当我关闭弹出窗口并重新打开它时,上面的trigger
都会抛出以下错误:
Uncaught TypeError: Cannot read property '0' of undefined
我调试并将其固定到Backbone源代码的trigger
和triggerEvents
函数。 triggerEvents
函数接受events
参数,这是一个事件回调列表。就我而言,列表中应该只有一个回调。但是,每次重新打开弹出窗口时,我都会在events
参数内堆叠一个重复的事件回调,这导致了问题。我怀疑这是由dangling Backbone views
造成的,通常被称为zombie views
所以我在this.stopListening()
函数上尝试了popupView.initialize()
,但我没有运气。
有没有人对这个问题有所了解? 谢谢。