From 4579543bded5549b5d0a1e579d36411d678dea47 Mon Sep 17 00:00:00 2001 From: James Petts Date: Wed, 23 Jan 2019 08:38:18 +0000 Subject: [PATCH] Fixed memory leak by properly triggering remove. (#339) --- .../client/lib/classes/LayoutManager.js | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/Packages/ohif-viewerbase/client/lib/classes/LayoutManager.js b/Packages/ohif-viewerbase/client/lib/classes/LayoutManager.js index 0abef3183..34d6785c1 100644 --- a/Packages/ohif-viewerbase/client/lib/classes/LayoutManager.js +++ b/Packages/ohif-viewerbase/client/lib/classes/LayoutManager.js @@ -211,6 +211,7 @@ export class LayoutManager { const layoutTemplate = Template[this.layoutTemplateName]; + this.removeViewportContainers(); this.parentNode.innerHTML = ''; this.updateLayoutClass(); Blaze.renderWithData(layoutTemplate, data, this.parentNode); @@ -316,6 +317,7 @@ export class LayoutManager { const layoutTemplate = Template.gridLayout; + this.removeViewportContainers(); this.parentNode.innerHTML = ''; Blaze.renderWithData(layoutTemplate, data, this.parentNode); @@ -732,4 +734,22 @@ export class LayoutManager { return this.layoutProps.row !== 1 && this.layoutProps.columns !== 1; } + /** + * removeViewportContainers - Removes viewport containers. Required to + * cause onDestroyed to trigger before rendering the layout manager with + * new data. + * + * @return {null} + */ + removeViewportContainers() { + const containers = $('.viewportContainer'); + + // NOTE: Trawl through object backwards, as we remove elements as we go. + for (let i = containers.length - 1; i >= 0; i--) { + const container = containers.get(i); + const removable = $(container).find('.removable'); + $(removable).remove(); + } + } + }