diff --git a/web/static/src/ts/core/qweb_vdom.ts b/web/static/src/ts/core/qweb_vdom.ts index 382e2287..1887aa96 100644 --- a/web/static/src/ts/core/qweb_vdom.ts +++ b/web/static/src/ts/core/qweb_vdom.ts @@ -930,7 +930,7 @@ const widgetDirective: Directive = { ctx.addLine(`extra.promises.push(def${defID});`); - if (node.getAttribute("t-if")) { + if (node.getAttribute("t-if") || node.getAttribute("t-else")) { ctx.closeIf(); } diff --git a/web/static/tests/core/component.test.ts b/web/static/tests/core/component.test.ts index a5f39cd9..bea01e19 100644 --- a/web/static/tests/core/component.test.ts +++ b/web/static/tests/core/component.test.ts @@ -816,6 +816,29 @@ describe("other directives with t-widget", () => { await widget.updateState({ flag: true }); expect(fixture.innerHTML).toBe("
hey
"); }); + + test("t-else works with t-widget", async () => { + class ParentWidget extends Widget { + inlineTemplate = ` +
+
somediv
+ +
`; + widgets = { child: Child }; + state = { flag: true }; + } + class Child extends Widget { + inlineTemplate = "hey"; + } + + const widget = new ParentWidget(env); + await widget.mount(fixture); + + expect(normalize(fixture.innerHTML)).toBe("
somediv
"); + + await widget.updateState({ flag: false }); + expect(normalize(fixture.innerHTML)).toBe("
hey
"); + }); }); describe("random stuff/miscellaneous", () => {