diff --git a/src/qweb_extensions.ts b/src/qweb_extensions.ts
index c4a60714..81375ea0 100644
--- a/src/qweb_extensions.ts
+++ b/src/qweb_extensions.ts
@@ -426,8 +426,8 @@ QWeb.addDirective({
let finalizeWidgetCode = `w${widgetID}.${
keepAlive ? "unmount" : "destroy"
}();`;
- if (ref) {
- finalizeWidgetCode += `delete context.refs[${refKey}];`; // FIXME: shouldn't we keep ref if keepAlive is true?
+ if (ref && !keepAlive) {
+ finalizeWidgetCode += `delete context.refs[${refKey}];`;
}
if (transition) {
finalizeWidgetCode = `let finalize = () => {
diff --git a/tests/component.test.ts b/tests/component.test.ts
index af07bc27..71b7d678 100644
--- a/tests/component.test.ts
+++ b/tests/component.test.ts
@@ -1144,6 +1144,40 @@ describe("composition", () => {
expect(input2.value).toBe("test");
});
+ test("sub widget with t-ref and t-keepalive", async () => {
+ env.qweb.addTemplates(`
+