diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 145be724d6c..15a402efb47 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -423,23 +423,22 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# self.on_invalid(); return $.Deferred().reject(); } else { + var save_deferral; if (!self.datarecord.id) { openerp.log("FormView(", self, ") : About to create", values); - return self.dataset.create(values).pipe(function(r) { + save_deferral = self.dataset.create(values).pipe(function(r) { return self.on_created(r, undefined, prepend_on_create); - }).then(success); + }, null); } else if (_.isEmpty(values)) { openerp.log("FormView(", self, ") : Nothing to save"); - if (success) { - success({}); - } - return $.Deferred().resolve({}).promise(); + save_deferral = $.Deferred().resolve({}).promise(); } else { openerp.log("FormView(", self, ") : About to save", values); - return self.dataset.write(self.datarecord.id, values, {}).pipe(function(r) { + save_deferral = self.dataset.write(self.datarecord.id, values, {}).pipe(function(r) { return self.on_saved(r); - }).then(success); + }, null); } + return save_deferral.then(success); } } catch (e) { console.error(e); diff --git a/addons/web/static/src/js/view_list_editable.js b/addons/web/static/src/js/view_list_editable.js index 155b183e11f..b2edf55b314 100644 --- a/addons/web/static/src/js/view_list_editable.js +++ b/addons/web/static/src/js/view_list_editable.js @@ -303,30 +303,27 @@ openerp.web.list_editable = function (openerp) { save_row: function () { //noinspection JSPotentiallyInvalidConstructorUsage var self = this, done = $.Deferred(); - this.edition_form.do_save(function (result) { - if (result.created && !self.edition_id) { - self.records.add({id: result.result}, - {at: self.options.editable === 'top' ? 0 : null}); - self.edition_id = result.result; - } - var edited_record = self.records.get(self.edition_id); + return this.edition_form + .do_save(null, this.options.editable === 'top') + .pipe(function (result) { + if (result.created && !self.edition_id) { + self.records.add({id: result.result}, + {at: self.options.editable === 'top' ? 0 : null}); + self.edition_id = result.result; + } + var edited_record = self.records.get(self.edition_id); - $.when( - self.handle_onwrite(self.edition_id), - self.cancel_pending_edition().then(function () { - $(self).trigger('saved', [self.dataset]); - })).then(function () { - done.resolve({ - created: result.created || false, - edited_record: edited_record - }); - }, function () { - done.reject(); - }); - }, this.options.editable === 'top').fail(function () { - done.reject(); - }); - return done.promise(); + return $.when( + self.handle_onwrite(self.edition_id), + self.cancel_pending_edition().then(function () { + $(self).trigger('saved', [self.dataset]); + })).pipe(function () { + return { + created: result.created || false, + edited_record: edited_record + }; + }, null); + }, null); }, /** * If the current list is being edited, ensures it's saved