From cc59da1fc88a0b50ac8d405af4fcca5b11a20fb9 Mon Sep 17 00:00:00 2001 From: Aaron Bohy Date: Thu, 13 Oct 2016 09:56:46 +0200 Subject: [PATCH] [FIX] web_diagram: wait for dialog's form view to be ready Since rev. 002660a, form views are instantiated with their fields_view. This has an impact in FormViewDialog as the inner form view instantiation is now asynchronous. The diagram view instantiates several FormViewDialogs but doesn't wait for the form view to be instantiated before accessing it, which produces a traceback. Closes #13775 --- addons/web_diagram/static/src/js/diagram.js | 40 ++++++++++----------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/addons/web_diagram/static/src/js/diagram.js b/addons/web_diagram/static/src/js/diagram.js index 4192e30a185..56664176ebe 100644 --- a/addons/web_diagram/static/src/js/diagram.js +++ b/addons/web_diagram/static/src/js/diagram.js @@ -246,16 +246,13 @@ var DiagramView = View.extend({ self.dataset.read_index(_.keys(self.fields_view.fields)).then(self.on_diagram_loaded); }); - var form_fields = [self.parent_field]; - var form_controller = pop.view_form; - - form_controller.on("load_record", self, function(){ - _.each(form_fields, function(fld) { - if (!(fld in form_controller.fields)) { return; } - var field = form_controller.fields[fld]; + pop.opened().then(function(){ + var form_controller = pop.view_form; + var field = form_controller.fields[self.parent_field]; + if (field) { field.$input.prop('disabled', true); field.$dropdown.unbind(); - }); + } }); }, @@ -274,16 +271,13 @@ var DiagramView = View.extend({ } }).open(); - var form_controller = pop.view_form; - var form_fields = [this.parent_field]; - - form_controller.on("load_record", self, function(){ - _.each(form_fields, function(fld) { - if (!(fld in form_controller.fields)) { return; } - var field = form_controller.fields[fld]; + pop.opened().then(function(){ + var form_controller = pop.view_form; + var field = form_controller.fields[self.parent_field]; + if (field) { field.set_value(self.id); field.dirty = true; - }); + } }); }, @@ -326,12 +320,14 @@ var DiagramView = View.extend({ } }); - var form_controller = pop.view_form; - form_controller.on("load_record", self, function(){ - form_controller.fields[self.connectors.attrs.source].set_value(node_source_id); - form_controller.fields[self.connectors.attrs.source].dirty = true; - form_controller.fields[self.connectors.attrs.destination].set_value(node_dest_id); - form_controller.fields[self.connectors.attrs.destination].dirty = true; + pop.opened().then(function(){ + var form_controller = pop.view_form; + var source_field = form_controller.fields[self.connectors.attrs.source]; + var destination_field = form_controller.fields[self.connectors.attrs.destination]; + source_field.set_value(node_source_id); + source_field.dirty = true; + destination_field.set_value(node_dest_id); + destination_field.dirty = true; }); },