From 6bd90847407c7048b15e8dd2dfa23be7efbd5f6b Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 17 Nov 2011 17:00:09 +0100 Subject: [PATCH] [FIX] issues with asynchronous set_value handling * field could be changed from under the closure, use _.each * There's a bug in Deferred.queue() when passing synchronous deferred (including non-deferred) it's instantanously resolved bzr revid: xmo@openerp.com-20111117160009-s702939kji69v3zf --- addons/web/static/src/js/view_form.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 49ba7b8df68..5f4fa77ea20 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -174,13 +174,17 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# this.$form_header.find('.oe_form_on_readonly').toggle(this.readonly); this.$form_header.find('.oe_form_on_editable').toggle(!this.readonly); this.datarecord = record; - for (var f in this.fields) { - var field = this.fields[f]; + + _(this.fields).each(function (field, f) { field.dirty = false; - deferred_stack.push($.when(field.set_value(this.datarecord[f] || false)).then(function() { + var result = field.set_value(self.datarecord[f] || false); + if (result && _.isFunction(result.promise)) { + deferred_stack.push(result); + } + $.when(result).then(function() { field.validate(); - })); - } + }); + }); deferred_stack.push('force resolution if no fields'); return deferred_stack.then(function() { if (!record.id) {