From 3cfd3e6b0bca7a36ea1668f780d146e05f50613a Mon Sep 17 00:00:00 2001 From: Mathieu Duckerts-Antoine Date: Wed, 25 Apr 2018 10:37:49 +0200 Subject: [FIX] web: proper rendering of widget tag There was no consideration of the fact that the widget rendering process could be asynchronous. This commit fixes that situation so that render a node of type is now possible. --- .../web/static/src/js/views/basic/basic_renderer.js | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) (limited to 'addons/web/static/src/js/views/basic/basic_renderer.js') diff --git a/addons/web/static/src/js/views/basic/basic_renderer.js b/addons/web/static/src/js/views/basic/basic_renderer.js index 1dae9f705ff..52388f8e638 100644 --- a/addons/web/static/src/js/views/basic/basic_renderer.js +++ b/addons/web/static/src/js/views/basic/basic_renderer.js @@ -629,15 +629,23 @@ var BasicRenderer = AbstractRenderer.extend({ // Prepare widget rendering and save the related deferred var def = widget._widgetRenderAndInsert(function () {}); - if (def.state() === 'pending') { + var async = def.state() === 'pending'; + if (async) { this.defs.push(def); } + var $el = async ? $('
') : widget.$el; - // handle other attributes/modifiers - this._handleAttributes(widget.$el, node); - this._registerModifiers(node, record, widget); - widget.$el.addClass('o_widget'); - return widget.$el; + var self = this; + def.then(function () { + self._handleAttributes(widget.$el, node); + self._registerModifiers(node, record, widget); + widget.$el.addClass('o_widget'); + if (async) { + $el.replaceWith(widget.$el); + } + }); + + return $el; }, /** -- cgit v1.2.3