From 1bb0439f198b3872b20bd2ebc30985f495f037ea Mon Sep 17 00:00:00 2001 From: yuri Date: Thu, 8 Feb 2018 16:02:12 +0200 Subject: [PATCH] fix model reset --- client/src/views/record/base.js | 17 ++++++++++++++--- client/src/views/record/detail.js | 18 +++++++++++++++--- 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/client/src/views/record/base.js b/client/src/views/record/base.js index 651077622b..625063d881 100644 --- a/client/src/views/record/base.js +++ b/client/src/views/record/base.js @@ -253,9 +253,9 @@ Espo.define('views/record/base', ['view', 'view-record-helper', 'dynamic-logic'] this.recordHelper = new ViewRecordHelper(); - this.on('remove', function () { + this.once('remove', function () { if (this.isChanged) { - this.model.set(this.attributes); + this.resetModelChanges(); } this.setIsNotChanged(); }, this); @@ -302,6 +302,17 @@ Espo.define('views/record/base', ['view', 'view-record-helper', 'dynamic-logic'] return !_.isEqual(this.attributes[name], this.model.get(name)); }, + resetModelChanges: function () { + var attributes = this.model.attributes; + for (var attr in attributes) { + if (!(attr in this.attributes)) { + this.model.unset(attr); + } + } + + this.model.set(this.attributes); + }, + initDynamicLogic: function () { if (!Object.keys(this.dynamicLogicDefs || {}).length) return; @@ -474,7 +485,7 @@ Espo.define('views/record/base', ['view', 'view-record-helper', 'dynamic-logic'] if (xhr.status == 400) { if (!this.isNew) { - this.model.set(this.attributes); + this.resetModelChanges(); } } diff --git a/client/src/views/record/detail.js b/client/src/views/record/detail.js index 89893c75d5..230f71e5b1 100644 --- a/client/src/views/record/detail.js +++ b/client/src/views/record/detail.js @@ -473,11 +473,23 @@ Espo.define('views/record/detail', ['views/record/base', 'view-record-helper'], }, cancelEdit: function () { - this.model.set(this.attributes); + this.resetModelChanges(); + this.setDetailMode(); this.setIsNotChanged(); }, + resetModelChanges: function () { + var attributes = this.model.attributes; + for (var attr in attributes) { + if (!(attr in this.attributes)) { + this.model.unset(attr); + } + } + + this.model.set(this.attributes); + }, + delete: function () { this.confirm({ message: this.translate('removeRecordConfirmation', 'messages'), @@ -663,9 +675,9 @@ Espo.define('views/record/detail', ['views/record/base', 'view-record-helper'], } } - this.on('remove', function () { + this.once('remove', function () { if (this.isChanged) { - this.model.set(this.attributes); + this.resetModelChanges(); } this.setIsNotChanged(); $(window).off('scroll.detail-' + this.numId);