call mounted hooks at proper timing

This commit is contained in:
Géry Debongnie
2019-01-25 11:01:43 +01:00
parent 179ad3edf4
commit 9c0b63cd29
6 changed files with 15 additions and 7 deletions
+4 -2
View File
@@ -51,8 +51,6 @@ export class Widget<T extends WEnv> {
async mount(target?: HTMLElement): Promise<VNode> {
await this.willStart();
this.isStarted = true;
this.env.qweb.addTemplate(this.name, this.template);
delete this.template;
const vnode = await this.render();
if (target) {
@@ -96,6 +94,10 @@ export class Widget<T extends WEnv> {
}
private async _render(): Promise<VNode> {
if (this.template) {
this.env.qweb.addTemplate(this.name, this.template);
delete this.template;
}
const promises: Promise<void>[] = [];
let vnode = this.env.qweb.render(this.name, this, { promises });
return Promise.all(promises).then(() => vnode);
+1 -1
View File
@@ -684,7 +684,7 @@ const widgetDirective: Directive = {
`let _${widgetID} = new context.widgets['${value}'](context, ${props})`
);
ctx.addLine(
`let def${defID} = _${widgetID}.mount().then(vnode=>Object.assign(_${dummyID}, vnode))`
`let def${defID} = _${widgetID}._render().then(vnode=>{Object.assign(_${dummyID}, vnode);_${dummyID}.data.hook = {create(_,vn){_${widgetID}.el=vn.elm}}})`
);
ctx.addLine(`extra.promises.push(def${defID})`);
+1 -1
View File
@@ -22,7 +22,7 @@ export class Counter extends Widget<Env> {
}
mounted() {
debugger;
console.log("counter mounter", this.el);
}
increment(delta: number) {
this.updateState({ counter: this.state.counter + delta });
+3
View File
@@ -18,6 +18,9 @@ export class Navbar extends Widget<Env> {
name = "navbar";
template = template;
mounted() {
console.log("navbar mounted", this.el);
}
getUrl(menu: Menu) {
const action_id = String(menu.actionID);
return this.env.router.formatURL("", { action_id });
+1
View File
@@ -15,6 +15,7 @@ export class Clock extends Widget<Env> {
}
mounted() {
console.log("clock mounter", this.el);
setInterval(this.updateTime.bind(this), 500);
}