diff --git a/addons/web/static/src/js/action_manager.js b/addons/web/static/src/js/action_manager.js index d1aa1fe3d06..de0f17691f3 100644 --- a/addons/web/static/src/js/action_manager.js +++ b/addons/web/static/src/js/action_manager.js @@ -203,8 +203,13 @@ var ActionManager = Widget.extend({ this.inner_action = new_action; this.inner_widget = widget; - // Append the inner_widget and hide the old one - return $.when(this.inner_widget.appendTo(this.$el)).done(function () { + // render the inner_widget in a fragment, and append it to the + // document only when it's ready + var new_widget_fragment = document.createDocumentFragment(); + return $.when(this.inner_widget.appendTo(new_widget_fragment)).done(function() { + self.$el.append(new_widget_fragment); + // Hide the old_widget as it will be removed from the DOM when it + // is destroyed if (old_widget) { old_widget.$el.hide(); } diff --git a/addons/web_calendar/static/src/js/web_calendar.js b/addons/web_calendar/static/src/js/web_calendar.js index 60597a32bfb..578826ccdeb 100644 --- a/addons/web_calendar/static/src/js/web_calendar.js +++ b/addons/web_calendar/static/src/js/web_calendar.js @@ -688,6 +688,12 @@ var CalendarView = View.extend({ } this.event_source = { events: function(start, end, callback) { + // catch invalid dates (start/end dates not parseable yet) + // => ignore request + if (isNaN(start) || isNaN(end)) { + return; + } + var current_event_source = self.event_source; self.dataset.read_slice(_.keys(self.fields), { offset: 0,