diff --git a/ipyvue/VueTemplateWidget.py b/ipyvue/VueTemplateWidget.py index 54b00c2..c09930c 100644 --- a/ipyvue/VueTemplateWidget.py +++ b/ipyvue/VueTemplateWidget.py @@ -59,6 +59,9 @@ def resolve_ref(value): else: getattr(self, "vue_" + event)(data) + def _clear_event_handler(self): + self.on_msg(self._handle_event, remove=True) + def _value_to_json(x, obj): if inspect.isclass(x): @@ -164,5 +167,9 @@ def on_ref_source_change(change): for traitlet in sync_ref_traitlets: create_ref_and_observe(traitlet) + def close(self): + self._clear_event_handler() + super().close() + __all__ = ["VueTemplate"] diff --git a/ipyvue/VueWidget.py b/ipyvue/VueWidget.py index 465f6a7..7562996 100644 --- a/ipyvue/VueWidget.py +++ b/ipyvue/VueWidget.py @@ -130,6 +130,9 @@ def _handle_event(self, _, content, buffers): data = content.get("data", {}) self._fire_event(event, data) + def _clear_event_handler(self): + self.on_msg(self._handle_event, remove=True) + class VueWidget(DOMWidget, Events): # we can drop this when https://github.com/jupyter-widgets/ipywidgets/pull/3592 @@ -192,5 +195,9 @@ def hide(self): self.class_list.add("d-none") + def close(self): + self._clear_event_handler() + super().close() + __all__ = ["VueWidget"]