summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js
diff options
context:
space:
mode:
Diffstat (limited to 'addons/web/static/src/js')
-rw-r--r--addons/web/static/src/js/fields/relational_fields.js8
-rw-r--r--addons/web/static/src/js/views/basic/basic_model.js4
-rw-r--r--addons/web/static/src/js/views/view_dialogs.js22
3 files changed, 15 insertions, 19 deletions
diff --git a/addons/web/static/src/js/fields/relational_fields.js b/addons/web/static/src/js/fields/relational_fields.js
index 19f2728a3ae..c9e6f218895 100644
--- a/addons/web/static/src/js/fields/relational_fields.js
+++ b/addons/web/static/src/js/fields/relational_fields.js
@@ -502,9 +502,11 @@ var FieldMany2One = AbstractField.extend({
title: _t("Open: ") + self.string,
view_id: view_id,
readonly: !self.can_write,
- on_saved: function () {
- self._setValue(self.value.data, {forceChange: true});
- self.trigger_up('reload', {db_id: self.value.id});
+ on_saved: function (record, changed) {
+ if (changed) {
+ self._setValue(self.value.data, {forceChange: true});
+ self.trigger_up('reload', {db_id: self.value.id});
+ }
},
}).open();
});
diff --git a/addons/web/static/src/js/views/basic/basic_model.js b/addons/web/static/src/js/views/basic/basic_model.js
index 27a1e12ecfe..445967287bf 100644
--- a/addons/web/static/src/js/views/basic/basic_model.js
+++ b/addons/web/static/src/js/views/basic/basic_model.js
@@ -896,6 +896,9 @@ var BasicModel = AbstractModel.extend({
return def.resolve(changedFields);
}
+ def.then(function () {
+ record._isDirty = false;
+ });
// in the case of a write, only perform the RPC if there are changes to save
if (method === 'create' || changedFields.length) {
var args = method === 'write' ? [[record.data.id], changes] : [changes];
@@ -917,7 +920,6 @@ var BasicModel = AbstractModel.extend({
// Erase changes as they have been applied
record._changes = {};
- record._isDirty = false;
// Update the data directly or reload them
if (shouldReload) {
diff --git a/addons/web/static/src/js/views/view_dialogs.js b/addons/web/static/src/js/views/view_dialogs.js
index da3fc94f2ce..f24bc9341b8 100644
--- a/addons/web/static/src/js/views/view_dialogs.js
+++ b/addons/web/static/src/js/views/view_dialogs.js
@@ -81,9 +81,9 @@ var FormViewDialog = ViewDialog.extend({
* @param {Object} [options.fields_view] optional form fields_view
* @param {boolean} [options.readonly=false] only applicable when not in
* creation mode
- * @param {function} [options.on_save] callback to execute when clicking on
- * 'Save' (form view's 'saveRecord' by default)
- * @param {function} [options.on_saved] callback executed after on_save
+ * @param {function} [options.on_saved] callback executed after saving a
+ * record. It will be called with the record data, and a boolean which
+ * indicates if something was changed
* @param {BasicModel} [options.model] if given, it will be used instead of
* a new form view model
* @param {string} [options.recordID] if given, the model has to be given as
@@ -211,24 +211,16 @@ var FormViewDialog = ViewDialog.extend({
_save: function () {
var self = this;
- var def;
- if (this.options.on_save) {
- if (this.form_view.canBeSaved()) {
- return $.Deferred().reject();
- }
- def = this.options.on_save(this.form_view.model.get(this.form_view.handle));
- } else {
- def = this.form_view.saveRecord(this.form_view.handle, {
+ return this.form_view.saveRecord(this.form_view.handle, {
stayInEdit: true,
reload: false,
savePoint: this.shouldSaveLocally,
viewType: 'form',
- });
- }
- return $.when(def).then(function () {
+ }).then(function (changedFields) {
// record might have been changed by the save (e.g. if this was a new record, it has an
// id now), so don't re-use the copy obtained before the save
- self.on_saved(self.form_view.model.get(self.form_view.handle));
+ var record = self.form_view.model.get(self.form_view.handle);
+ self.on_saved(record, !!changedFields.length);
});
},
});