Hay múltiples bibliotecas en las que cada una de ellas genera algunos elementos HTML que se ejecutan por separado, de modo que al ejecutar una biblioteca, primero se deben eliminar los elementos creados por la biblioteca anterior y luego se generarán nuevos elementos. Funcionó bien, los elementos se eliminaron correctamente y los nuevos se crearon correctamente.
Pero hay un problema: la biblioteca anterior que se ejecuta, vuelve a existir en la memoria y escucha eventos. ¿Cómo puedo eliminar eso de la memoria?
import { LeftSidebarEditor } from './editor/LeftSidebar.Editor.js'; import { LeftSidebarSupport } from './support/LeftSidebar.Support.js'; function LeftSidebar(editor) { var signals = editor.signals; var container = new UIPanel(); container.setId('left-sidebar-menu'); var item = new LeftSidebarEditor(editor); container.add(item); signals.scopeChanged.add(function (scope) { editor.currentScope = JSON.stringify(scope); // remove all elements container.clear(); item = null; switch (scope) { case 'editor': // container.add(new LeftSidebarEditor(editor)); item = new LeftSidebarEditor(editor); container.add(item); break; case 'support': // container.add(new LeftSidebarSupport(editor)); item = new LeftSidebarSupport(editor); container.add(item); break; } }); return container; } class LeftSidebarSupport { constructor(editor) { let counter = 0; setInterval(() => { console.log('I am alive from support', counter++); }, 2000); signals.objectSelected.add(function (object) { if (object != null) { return; } const selected = document.querySelector('#left-sidebar-menu li.selected'); if (selected){ let selected_attr = selected.getAttribute('data-tooltip'); if (selected_attr!='Tag'){ removeAllSelected(); } } }); function removeAllSelected() { const selected = document.querySelector('#left-sidebar-menu li.selected'); if (selected) { selected.classList.remove('selected'); } } } } ¡Al cambiar la señal de support a editor nuevamente, los registros impresos deben detenerse! Quiero que, al cambiar entre ámbitos, solo exista la biblioteca de ámbitos actual en la memoria y otros se eliminen por completo.
I am alive from support 89 I am alive from support 90 I am alive from support 91 I am alive from support 92 I am alive from support 93Realmente no hay intervalo, pero existe un fragmento de código que elimina una clase de los elementos. Para simplificar, aquí se usa el ejemplo del intervalo. La base de mi pregunta es ¿por qué se puede volver a ejecutar LeftSidebarSupport?