Skip to content
This repository was archived by the owner on Jul 27, 2024. It is now read-only.

Commit f983ff5

Browse files
committed
fix(Popup): fix memory leak due to detached DOM tree
1 parent 09571b6 commit f983ff5

File tree

3 files changed

+13
-10
lines changed

3 files changed

+13
-10
lines changed

src/popup/app.js

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
define('app', function (require, exports, _module) {
2-
var MenuView = require('views/Menu');
3-
var CommandsView = require('views/Command');
42
var models = require('models');
53
var Menu = models.Menu;
64
var MenuItem = models.MenuItem;
5+
var MenuView = require('views/Menu');
6+
var CommandsView = require('views/Command');
7+
var cache = require('cache');
78

89
var scriptsMenu = exports.scriptsMenu = new Menu;
910
var commandsMenu = exports.commandsMenu = new Menu;
@@ -12,21 +13,23 @@ define('app', function (require, exports, _module) {
1213
hasCommands: false,
1314
});
1415

15-
var App = Backbone.Router.extend({
16+
var App = cache.BaseRouter.extend({
1617
routes: {
1718
'': 'renderMenu',
1819
commands: 'renderCommands',
1920
},
2021
renderMenu: function () {
21-
this.view && this.view.stopListening();
22-
this.view = new MenuView;
22+
this.loadView('menu', function () {
23+
return new MenuView;
24+
});
2325
},
2426
renderCommands: function () {
25-
this.view && this.view.stopListening();
26-
this.view = new CommandsView;
27+
this.loadView('commands', function () {
28+
return new CommandsView;
29+
});
2730
},
2831
});
29-
var app = new App();
32+
var app = new App('#app');
3033
Backbone.history.start() || app.navigate('', {trigger: true, replace: true});
3134
exports.navigate = app.navigate.bind(app);
3235

src/popup/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
<script src="/cache.js"></script>
1414
</head>
1515
<body>
16-
<div id="popup"></div>
16+
<div id="app"></div>
1717
<script src="app.js"></script>
1818
</body>
1919
</html>

src/popup/views/base.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@ define('views/Base', function (require, _exports, module) {
55
var MenuItem = models.MenuItem;
66

77
module.exports = BaseView.extend({
8-
el: '#popup',
98
templateUrl: '/popup/templates/menu.html',
109
addMenuItem: function (obj, parent, nextSibling) {
1110
if (!(obj instanceof MenuItem)) obj = new MenuItem(obj);
1211
var view = new MenuItemView({model: obj});
1312
if (nextSibling) view.$el.insertBefore(nextSibling);
1413
else parent.append(view.$el);
14+
this.childViews.push(view);
1515
return view;
1616
},
1717
});

0 commit comments

Comments
 (0)