mirror of
https://github.com/odoo/owl.git
synced 2025-10-06 19:59:41 +07:00
t-widget directive
This commit is contained in:
+24
-19
@@ -96,7 +96,8 @@ export default class QWeb {
|
||||
elifDirective,
|
||||
ifDirective,
|
||||
callDirective,
|
||||
onDirective
|
||||
onDirective,
|
||||
widgetDirective
|
||||
].forEach(d => this.addDirective(d));
|
||||
}
|
||||
|
||||
@@ -641,21 +642,25 @@ const onDirective: Directive = {
|
||||
}
|
||||
};
|
||||
|
||||
// const widgetDirective: Directive = {
|
||||
// name: "widget",
|
||||
// priority: 100,
|
||||
// atNodeEncounter({ ctx, fullName, value, node, qweb}): boolean {
|
||||
// let spanID = ctx.generateID();
|
||||
// ctx.addLine(`let ${spanID} = document.createElement('span')`);
|
||||
// ctx.addNode(spanID)
|
||||
// let props = node.getAttribute('t-props');
|
||||
// let widgetID = ctx.generateID();
|
||||
// ctx.addLine(`let ${widgetID} = new context.widgets['${value}'](context, ${props})`);
|
||||
// ctx.addLine(`${widgetID}.mount(${spanID}).then(()=>${ctx.parentNode}.replaceChild(${widgetID}.el, ${spanID}))`);
|
||||
// let ref = node.getAttribute('t-ref');
|
||||
// if (ref) {
|
||||
// ctx.addLine(`context.refs['${ref}'] = ${widgetID}`);
|
||||
// }
|
||||
// return true;
|
||||
// }
|
||||
// };
|
||||
const widgetDirective: Directive = {
|
||||
name: "widget",
|
||||
priority: 100,
|
||||
atNodeEncounter({ ctx, fullName, value, node, qweb}): boolean {
|
||||
let dummyID = ctx.generateID();
|
||||
let defID = ctx.generateID();
|
||||
ctx.addLine(`let _${dummyID} = {} // DUMMY`);
|
||||
ctx.addLine(`c${ctx.parentNode}.push(_${dummyID})`);
|
||||
let props = node.getAttribute('t-props');
|
||||
let widgetID = ctx.generateID();
|
||||
ctx.addLine(`let _${widgetID} = new context.widgets['${value}'](context, ${props})`);
|
||||
ctx.addLine(`let def${defID} = _${widgetID}.mount().then(vnode=>Object.assign(_${dummyID}, vnode))`);
|
||||
ctx.addLine(`context._TEMP.push(def${defID})`);
|
||||
|
||||
// split into extra directive?
|
||||
let ref = node.getAttribute('t-ref');
|
||||
if (ref) {
|
||||
ctx.addLine(`context.refs['${ref}'] = _${widgetID}`);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user