[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
This commit is contained in:
Aaron Bohy
2016-10-26 13:37:28 +02:00
parent d183de7aae
commit cc59da1fc8
+18 -22
View File
@@ -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;
});
},