changeset ce1affcacd76 in sao:5.6
details: https://hg.tryton.org/sao?cmd=changeset;node=ce1affcacd76
description:
        Skip destroyed records when fetching data from the server

        issue9669
        review294631002
        (grafted from e20c9e4289c1ef91c8bcd37af4a9bcbfe835e609)
diffstat:

 src/model.js |  18 ++++++++++++++++--
 1 files changed, 16 insertions(+), 2 deletions(-)

diffs (56 lines):

diff -r b8c87abee84d -r ce1affcacd76 src/model.js
--- a/src/model.js      Thu Oct 29 00:01:48 2020 +0100
+++ b/src/model.js      Fri Oct 30 19:01:11 2020 +0100
@@ -265,6 +265,7 @@
             context._timestamp = {};
             records.forEach(function(record) {
                 jQuery.extend(context._timestamp, record.get_timestamp());
+                record.destroy();
             });
             var record_ids = records.map(function(record) {
                 return record.id;
@@ -554,6 +555,7 @@
             this.state_attrs = {};
             this.autocompletion = {};
             this.exception = false;
+            this.destroyed = false;
         },
         has_changed: function() {
             return !jQuery.isEmptyObject(this._changed);
@@ -620,7 +622,7 @@
         load: function(name) {
             var fname;
             var prm;
-            if (this.is_loaded(name)) {
+            if (this.destroyed || this.is_loaded(name)) {
                 return jQuery.when();
             }
             if (this.group.prm.state() == 'pending') {
@@ -689,7 +691,9 @@
                         10);
 
                 var filter_group = function(record) {
-                    return !(name in record._loaded) && (record.id >= 0);
+                    return (!record.destroyed &&
+                        (record.id >= 0) &&
+                        !(name in record._loaded));
                 };
                 var filter_parent_group = function(record) {
                     return (filter_group(record) &&
@@ -1401,6 +1405,16 @@
                 this.button_clicks[name] = clicks;
                 return clicks;
             }.bind(this));
+        },
+        destroy: function() {
+            var vals = Object.values(this._values);
+            for (var i=0; i < vals.length; i++) {
+                var val = vals[i];
+                if (val.hasOwnProperty('destroy')) {
+                    val.destroy();
+                }
+            }
+            this.destroyed = true;
         }
     });
 

Reply via email to