summaryrefslogtreecommitdiff
path: root/addons/web
diff options
context:
space:
mode:
Diffstat (limited to 'addons/web')
-rw-r--r--addons/web/static/src/js/views/abstract_controller.js8
-rw-r--r--addons/web/static/tests/views/abstract_controller_tests.js30
2 files changed, 36 insertions, 2 deletions
diff --git a/addons/web/static/src/js/views/abstract_controller.js b/addons/web/static/src/js/views/abstract_controller.js
index 866abb03d65..f68c4b793a8 100644
--- a/addons/web/static/src/js/views/abstract_controller.js
+++ b/addons/web/static/src/js/views/abstract_controller.js
@@ -125,7 +125,9 @@ var AbstractController = mvc.Controller.extend(ActionMixin, {
this._controlPanelModel.on('search', this, this._onSearch);
this._controlPanelModel.on('get-controller-query-params', this, this._onGetOwnedQueryParams);
}
- this.renderer.on_attach_callback();
+ if (!(this.renderer instanceof owl.Component)) {
+ this.renderer.on_attach_callback();
+ }
},
/**
* Called each time the controller is detached from the DOM.
@@ -136,7 +138,9 @@ var AbstractController = mvc.Controller.extend(ActionMixin, {
this._controlPanelModel.off('search', this);
this._controlPanelModel.off('get-controller-query-params', this);
}
- this.renderer.on_detach_callback();
+ if (!(this.renderer instanceof owl.Component)) {
+ this.renderer.on_detach_callback();
+ }
},
//--------------------------------------------------------------------------
diff --git a/addons/web/static/tests/views/abstract_controller_tests.js b/addons/web/static/tests/views/abstract_controller_tests.js
index 09b95abddda..43b71b5293a 100644
--- a/addons/web/static/tests/views/abstract_controller_tests.js
+++ b/addons/web/static/tests/views/abstract_controller_tests.js
@@ -134,5 +134,35 @@ QUnit.module("Views", {
assert.hasClass(document.activeElement, "o_searchview_input");
view.destroy();
});
+
+ QUnit.test('Owl Renderer mounted/willUnmount hooks are properly called', async function (assert) {
+ // This test could be removed as soon as controllers and renderers will
+ // both be converted in Owl.
+ assert.expect(3);
+
+ class Renderer extends AbstractRenderer {
+ mounted() {
+ assert.step("mounted");
+ }
+ willUnmount() {
+ assert.step("unmounted");
+ }
+ }
+ Renderer.template = xml`<div>Test</div>`;
+
+ const view = await createView({
+ View: getOwlView(Renderer, "test"),
+ data: this.data,
+ model: "test_model",
+ arch: "<test/>",
+ });
+
+ view.destroy();
+
+ assert.verifySteps([
+ "mounted",
+ "unmounted",
+ ]);
+ });
});
});