diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 3fa9afea0bcafcd71227156e044412aba3f94d2c..eca9f6549ee2ca2f5e0149c2cf53ac0cb5106929 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -586,7 +586,16 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM var self = this; return this.mutating_mutex.exec(function() { function iterate() { - var defs = []; + var start = $.Deferred(); + start.resolve(); + start = _.reduce(self.onchanges_defs, function(memo, d){ + return memo.then(function(){ + return d; + }, function(){ + return d; + }); + }, start); + var defs = [start]; _.each(self.fields, function(field) { defs.push(field.commit_value()); }); @@ -794,14 +803,12 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM var self = this; var save_obj = {prepend_on_create: prepend_on_create, ret: null}; this.save_list.push(save_obj); - return $.when.apply($, self.onchanges_defs).then(function(){ - return self._process_operations().then(function() { - if (save_obj.error) - return $.Deferred().reject(); - return $.when.apply($, save_obj.ret); - }).done(function() { - self.$el.removeClass('oe_form_dirty'); - }); + return self._process_operations().then(function() { + if (save_obj.error) + return $.Deferred().reject(); + return $.when.apply($, save_obj.ret); + }).done(function(result) { + self.$el.removeClass('oe_form_dirty'); }); }, _process_save: function(save_obj) {