mirror of
https://github.com/odoo/owl.git
synced 2025-10-06 19:59:41 +07:00
committed by
Géry Debongnie
parent
1464a3631b
commit
1f9ec46236
@@ -426,8 +426,8 @@ QWeb.addDirective({
|
|||||||
let finalizeWidgetCode = `w${widgetID}.${
|
let finalizeWidgetCode = `w${widgetID}.${
|
||||||
keepAlive ? "unmount" : "destroy"
|
keepAlive ? "unmount" : "destroy"
|
||||||
}();`;
|
}();`;
|
||||||
if (ref) {
|
if (ref && !keepAlive) {
|
||||||
finalizeWidgetCode += `delete context.refs[${refKey}];`; // FIXME: shouldn't we keep ref if keepAlive is true?
|
finalizeWidgetCode += `delete context.refs[${refKey}];`;
|
||||||
}
|
}
|
||||||
if (transition) {
|
if (transition) {
|
||||||
finalizeWidgetCode = `let finalize = () => {
|
finalizeWidgetCode = `let finalize = () => {
|
||||||
|
|||||||
@@ -1144,6 +1144,40 @@ describe("composition", () => {
|
|||||||
expect(input2.value).toBe("test");
|
expect(input2.value).toBe("test");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test("sub widget with t-ref and t-keepalive", async () => {
|
||||||
|
env.qweb.addTemplates(`
|
||||||
|
<templates>
|
||||||
|
<div t-name="ParentWidget">
|
||||||
|
<t t-if="state.ok"><t t-widget="ChildWidget" t-ref="child" t-keepalive="1"/></t>
|
||||||
|
</div>
|
||||||
|
<span t-name="ChildWidget">Hello</span>
|
||||||
|
</templates>`
|
||||||
|
);
|
||||||
|
class ParentWidget extends Widget {
|
||||||
|
state = { ok: true };
|
||||||
|
widgets = { ChildWidget };
|
||||||
|
}
|
||||||
|
class ChildWidget extends Widget {}
|
||||||
|
const widget = new ParentWidget(env);
|
||||||
|
await widget.mount(fixture);
|
||||||
|
let child = children(widget)[0];
|
||||||
|
|
||||||
|
expect(fixture.innerHTML).toBe('<div><span>Hello</span></div>');
|
||||||
|
expect(widget.refs.child).toEqual(child);
|
||||||
|
|
||||||
|
widget.state.ok = false;
|
||||||
|
await nextTick();
|
||||||
|
|
||||||
|
expect(fixture.innerHTML).toBe('<div></div>');
|
||||||
|
expect(widget.refs.child).toEqual(child);
|
||||||
|
|
||||||
|
widget.state.ok = true;
|
||||||
|
await nextTick();
|
||||||
|
|
||||||
|
expect(fixture.innerHTML).toBe('<div><span>Hello</span></div>');
|
||||||
|
expect(widget.refs.child).toEqual(child);
|
||||||
|
});
|
||||||
|
|
||||||
test("sub widgets rendered in a loop", async () => {
|
test("sub widgets rendered in a loop", async () => {
|
||||||
env.qweb.addTemplate("ChildWidget", `<span><t t-esc="props.n"/></span>`);
|
env.qweb.addTemplate("ChildWidget", `<span><t t-esc="props.n"/></span>`);
|
||||||
class ChildWidget extends Widget {}
|
class ChildWidget extends Widget {}
|
||||||
|
|||||||
Reference in New Issue
Block a user