summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/views/abstract_controller.js
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2018-05-30 12:18:52 +0200
committerChristophe Simonis <chs@odoo.com>2018-05-30 12:18:52 +0200
commite008ef302a1b3fc584d4f0fb9956d237947f17d5 (patch)
tree7976948d25c1aa7aa23123ccabb37b5eaae8e8e3 /addons/web/static/src/js/views/abstract_controller.js
parentf36e6917bd73a56dc0c7468b4849920df4088154 (diff)
parent53300648edef8f87bfd0bff6b52536efdd1cc82c (diff)
[MERGE] forward port branch saas-11.3 up to 53300648ede
Diffstat (limited to 'addons/web/static/src/js/views/abstract_controller.js')
-rw-r--r--addons/web/static/src/js/views/abstract_controller.js15
1 files changed, 15 insertions, 0 deletions
diff --git a/addons/web/static/src/js/views/abstract_controller.js b/addons/web/static/src/js/views/abstract_controller.js
index 2f9957737ae..bf4f3a616f3 100644
--- a/addons/web/static/src/js/views/abstract_controller.js
+++ b/addons/web/static/src/js/views/abstract_controller.js
@@ -235,11 +235,26 @@ var AbstractController = AbstractAction.extend(ControlPanelMixin, {
var self = this;
var shouldReload = (options && 'reload' in options) ? options.reload : true;
var def = shouldReload ? this.model.reload(this.handle, params) : $.when();
+ // we check here that the updateIndex of the control panel hasn't changed
+ // between the start of the update request and the moment the controller
+ // asks the control panel to update itself ; indeed, it could happen that
+ // another action/controller is executed during this one reloads itself,
+ // and if that one finishes first, it replaces this controller in the DOM,
+ // and this controller should no longer update the control panel.
+ // note that this won't be necessary as soon as each controller will have
+ // its own control panel
+ var cpUpdateIndex = this.cp_bus && this.cp_bus.updateIndex;
return this.dp.add(def).then(function (handle) {
+ if (self.cp_bus && cpUpdateIndex !== self.cp_bus.updateIndex) {
+ return;
+ }
self.handle = handle || self.handle; // update handle if we reloaded
var state = self.model.get(self.handle);
var localState = self.renderer.getLocalState();
return self.dp.add(self.renderer.updateState(state, params)).then(function () {
+ if (self.cp_bus && cpUpdateIndex !== self.cp_bus.updateIndex) {
+ return;
+ }
self.renderer.setLocalState(localState);
self._update(state);
});