[IMP] qweb: add renderToString method

closes #230
This commit is contained in:
Géry Debongnie
2019-07-09 09:45:43 +02:00
committed by aab-odoo
parent 9f1e64d399
commit e24ff8f8aa
3 changed files with 39 additions and 2 deletions
+18 -1
View File
@@ -1,4 +1,4 @@
import { VNode, h } from "./vdom";
import { VNode, h, patch } from "./vdom";
import { QWebVar, compileExpr } from "./qweb_expressions";
import { EventBus } from "./event_bus";
@@ -288,6 +288,23 @@ export class QWeb extends EventBus {
return template.fn.call(this, context, extra);
}
/**
* Render a template to a html string.
*
* Note that this is more limited than the `render` method: it is not suitable
* to render a full component tree, since this is an asynchronous operation.
* This method can only render templates without components.
*/
renderToString(name: string, context: EvalContext = {}): string {
const vnode = this.render(name, context);
if (vnode.sel === undefined) {
return vnode.text!;
}
const node = document.createElement(vnode.sel);
const result = patch(node, vnode);
return (<HTMLElement>result.elm).outerHTML;
}
_compile(name: string, elem: Element, parentContext?: Context): CompiledTemplate {
const isDebug = elem.attributes.hasOwnProperty("t-debug");
const ctx = new Context(name);