From eadb161a38cb9d1bd6065bf2e01f103b8e96017d Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Wed, 14 Sep 2011 23:04:45 +0200 Subject: [PATCH] [IMP] Improved dirty state in form view bzr revid: fme@openerp.com-20110914210445-ul8aax7g1q5b47c6 --- addons/web/static/src/js/view_form.js | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index aecc52c5eef..583f8f38b67 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -35,7 +35,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# this.datarecord = {}; this.ready = false; this.show_invalid = true; - this.dirty = false; + this.dirty_for_user = false; this.default_focus_field = null; this.default_focus_button = null; this.registry = openerp.web.form.widgets; @@ -135,7 +135,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# this.$form_header.find('.oe_form_on_update').show(); this.$form_header.find('button.oe_form_button_new').show(); } - this.dirty = false; + this.dirty_for_user = false; this.datarecord = record; for (var f in this.fields) { var field = this.fields[f]; @@ -145,7 +145,6 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# } if (!record.id) { // New record: Second pass in order to trigger the onchanges - this.dirty = true; this.show_invalid = false; for (var f in record) { var field = this.fields[f]; @@ -270,7 +269,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# processed.push(field.name); if (field.get_value() != value) { field.set_value(value); - field.dirty = true; + field.dirty = this.dirty_for_user = true; if (_.indexOf(processed, field.name) < 0) { this.do_onchange(field, processed); } @@ -298,10 +297,9 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# var self = this; var def = $.Deferred(); $.when(this.has_been_loaded).then(function() { - self.dataset.default_get( - _.keys(self.fields_view.fields)).then(self.on_record_loaded).then(function() { - def.resolve(); - }); + self.dataset.default_get(_.keys(self.fields_view.fields)).then(self.on_record_loaded).then(function() { + def.resolve(); + }); }); return def.promise(); }, @@ -809,7 +807,7 @@ openerp.web.form.WidgetButton = openerp.web.form.Widget.extend({ }, on_click: function(saved) { var self = this; - if (!this.node.attrs.special && this.view.dirty && saved !== true) { + if ((!this.node.attrs.special && this.view.dirty_for_user && saved !== true) || !this.view.recordcount.id) { this.view.do_save(function() { self.on_click(true); }); @@ -957,7 +955,7 @@ openerp.web.form.Field = openerp.web.form.Widget.extend(/** @lends openerp.web.f } }, on_ui_change: function() { - this.dirty = this.view.dirty = true; + this.dirty = this.view.dirty_for_user = true; this.validate(); if (this.is_valid()) { this.set_value_from_ui();