[IMP] FormView: on_record_loaded returns a promise

bzr revid: fme@openerp.com-20111117124319-61ruoa9g8we1a438
This commit is contained in:
Fabien Meghazi 2011-11-17 13:43:19 +01:00
parent d673d7325c
commit c4a10281e4
1 changed files with 27 additions and 21 deletions

View File

@ -155,6 +155,8 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView#
} }
}, },
on_record_loaded: function(record) { on_record_loaded: function(record) {
var self = this,
deferred_stack = $.Deferred.queue();
if (!record) { if (!record) {
throw("Form: No record received"); throw("Form: No record received");
} }
@ -175,30 +177,34 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView#
for (var f in this.fields) { for (var f in this.fields) {
var field = this.fields[f]; var field = this.fields[f];
field.dirty = false; field.dirty = false;
field.set_value(this.datarecord[f] || false); deferred_stack.push($.when(field.set_value(this.datarecord[f] || false)).then(function() {
field.validate(); field.validate();
}));
} }
if (!record.id) { deferred_stack.push('force resolution if no fields');
// New record: Second pass in order to trigger the onchanges return deferred_stack.then(function() {
this.show_invalid = false; if (!record.id) {
for (var f in record) { // New record: Second pass in order to trigger the onchanges
var field = this.fields[f]; self.show_invalid = false;
if (field) { for (var f in record) {
field.dirty = true; var field = self.fields[f];
this.do_onchange(field); if (field) {
field.dirty = true;
self.do_onchange(field);
}
} }
} }
} self.on_form_changed();
this.on_form_changed(); self.initial_mutating_lock.resolve();
this.initial_mutating_lock.resolve(); self.show_invalid = true;
this.show_invalid = true; self.do_update_pager(record.id == null);
this.do_update_pager(record.id == null); if (self.sidebar) {
if (this.sidebar) { self.sidebar.attachments.do_update();
this.sidebar.attachments.do_update(); }
} if (self.default_focus_field && !self.embedded_view) {
if (this.default_focus_field && !this.embedded_view) { self.default_focus_field.focus();
this.default_focus_field.focus(); }
} });
}, },
on_form_changed: function() { on_form_changed: function() {
for (var w in this.widgets) { for (var w in this.widgets) {