diff options
| author | Mathieu Duckerts-Antoine <dam@odoo.com> | 2018-04-25 10:37:49 +0200 |
|---|---|---|
| committer | Mathieu Duckerts-Antoine <dam@odoo.com> | 2018-05-30 12:03:24 +0200 |
| commit | 3cfd3e6b0bca7a36ea1668f780d146e05f50613a (patch) | |
| tree | 611a12be0d408ec4370a440f06cf4e49324fac30 /addons/web/static/src/js | |
| parent | c2c9a604665af97f049ab81117789f2bb0b31612 (diff) | |
[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
<widget name="..."> is now possible.
Diffstat (limited to 'addons/web/static/src/js')
| -rw-r--r-- | addons/web/static/src/js/views/basic/basic_renderer.js | 20 |
1 files changed, 14 insertions, 6 deletions
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 ? $('<div>') : 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; }, /** |
