From 5bc7011b52f824878891a98c90f4d87ad5941a15 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Wed, 26 Oct 2011 17:23:05 +0200 Subject: [PATCH] [fix] race condition in m2m bzr revid: nicolas.vanhoren@openerp.com-20111026152305-t7rg7mn37h91swra --- addons/web/static/src/js/view_form.js | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 2bc4cd50766..29d7e70b6ed 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -2232,7 +2232,8 @@ openerp.web.form.FieldMany2Many = openerp.web.form.Field.extend({ init: function(view, node) { this._super(view, node); this.list_id = _.uniqueId("many2many"); - this.is_started = $.Deferred(); + this.is_loaded = $.Deferred(); + this.initial_is_loaded = this.is_loaded; this.is_setted = $.Deferred(); }, start: function() { @@ -2258,9 +2259,7 @@ openerp.web.form.FieldMany2Many = openerp.web.form.Field.extend({ this._super(value); this.dataset.set_ids(value); var self = this; - $.when(this.is_started).then(function() { - self.list_view.reload_content(); - }); + self.reload_content(); this.is_setted.resolve(); }, get_value: function() { @@ -2279,7 +2278,7 @@ openerp.web.form.FieldMany2Many = openerp.web.form.Field.extend({ this.list_view.m2m_field = this; var loaded = $.Deferred(); this.list_view.on_loaded.add_last(function() { - self.is_started.resolve(); + self.initial_is_loaded.resolve(); loaded.resolve(); }); setTimeout(function () { @@ -2287,16 +2286,22 @@ openerp.web.form.FieldMany2Many = openerp.web.form.Field.extend({ }, 0); return loaded; }, + reload_content: function() { + var self = this; + this.is_loaded = this.is_loaded.pipe(function() { + return self.list_view.reload_content(); + }); + }, update_dom: function() { this._super.apply(this, arguments); var self = this; if (this.previous_readonly !== this.readonly) { this.previous_readonly = this.readonly; if (this.list_view) { - $.when(this.is_started).then(function() { + this.is_loaded = this.is_loaded.pipe(function() { self.list_view.stop(); - $.when(self.load_view()).then(function() { - self.list_view.reload_content(); + return $.when(self.load_view()).then(function() { + self.reload_content(); }); }); }