如何在Marionette.js中分离模块事件处理程序?

时间:2015-05-05 07:36:47

标签: backbone.js google-chrome-extension marionette

我正在使用Marionette制作Chrome扩展程序。该应用程序已在后台页面中定义并运行。弹出页面添加了弹出模块

var App = chrome.extension.getBackgroundPage().App;
App.module("Popup", function (Popup) {
  ...
  Popup.on("start", function () { console.log(window); });
}

模块在页面加载后启动,并在页面卸载后停止。

document.addEventListener("DOMContentLoaded", function () {
  App.module("Popup").start();
});

window.addEventListener("unload", function () {
  App.module("Popup").stop();
});

问题是模块附加到后台页面中的应用程序,因此每次打开弹出窗口后,都会调用此模块定义并将新的start事件处理程序附加到现有模块。显然,模块启动时会调用所有处理程序。显然,我只能为第一个弹出窗口调用模块定义。但是start处理程序与当前window相关联,因此console.log(window)为先前弹出窗口中附加的null处理程序打印start,并且{&1;}我想分开那些处理程序。

PS。如果它有任何重要性,实际问题就在

中发生
Popup.on("start", function () { Backbone.history.start(); });

即在Backbone.history.getHash()

var match = (window || this).location.href.match(/#(.*)$/);
Uncaught TypeError: Cannot read property 'match' of undefined

0 个答案:

没有答案
相关问题