this.widgets = {};
this.widgets_counter = 0;
this.fields = {};
+ this.fields_order = [];
this.datarecord = {};
this.show_invalid = true;
this.default_focus_field = null;
on_loaded: function(data) {
var self = this;
if (data) {
+ this.fields_order = [];
this.fields_view = data;
var frame = new (this.registry.get_object('frame'))(this, this.fields_view.arch);
self.translatable_fields = [];
self.widgets = {};
self.fields = {};
+ self.fields_order = [];
self.$form_header.find('button').unbind('click');
self.readonly = !self.readonly;
self.registry = self.readonly ? openerp.web.form.readonly : openerp.web.form.widgets;
deferred_stack.push('force resolution if no fields');
return deferred_stack.then(function() {
if (!record.id) {
- // New record: Second pass in order to trigger the onchanges
self.show_invalid = false;
- for (var f in record) {
- var field = self.fields[f];
- if (field) {
+ // New record: Second pass in order to trigger the onchanges
+ // respecting the fields order defined in the view
+ _.each(self.fields_order, function(field_name) {
+ if (record[field_name] !== undefined) {
+ var field = self.fields[field_name];
field.dirty = true;
self.do_onchange(field);
}
- }
+ });
}
self.on_form_changed();
self.initial_mutating_lock.resolve();
this.name = node.attrs.name;
this.value = undefined;
view.fields[this.name] = this;
+ view.fields_order.push(this.name);
this.type = node.attrs.widget || view.fields_view.fields[node.attrs.name].type;
this.element_name = "field_" + this.name + "_" + this.type;
this.view_id = 'reference_' + _.uniqueId();
this.widgets = {};
this.fields = {};
+ this.fields_order = [];
this.selection = new openerp.web.form.FieldSelection(this, { attrs: {
name: 'selection',
widget: 'selection'