changeset c6d4386ad622 in sao:5.0
details: https://hg.tryton.org/sao?cmd=changeset;node=c6d4386ad622
description:
        Remove unnecessary calls to fields_view_get

        Screen.count_tab_domain should be called after the switch_view as it is 
done
        in tryton. This avoid to trigger a call to fields_view_get for the
        domain_parser.
        Screen.switch_view is performing one extra loop compared to tryton. This
        trigger and extra call fields_view_get.

        issue8167
        review60581002
        (grafted from 46f47d631ee2530b43854ff86e954476ac6c1313)
diffstat:

 src/screen.js |  51 ++++++++++++++++++++++++++++++++++-----------------
 src/tab.js    |   1 +
 2 files changed, 35 insertions(+), 17 deletions(-)

diffs (96 lines):

diff -r 995a3dd59041 -r c6d4386ad622 src/screen.js
--- a/src/screen.js     Fri Mar 08 18:38:16 2019 +0100
+++ b/src/screen.js     Fri Mar 15 11:14:16 2019 +0100
@@ -739,7 +739,9 @@
             this.tab = null;
             this.message_callback = null;
             this.switch_callback = null;
-            this.count_tab_domain();
+            // count_tab_domain is called in Sao.Tab.Form.init after
+            // switch_view to avoid unnecessary call to fields_view_get by
+            // domain_parser.
         },
         load_next_view: function() {
             if (!jQuery.isEmptyObject(this.view_to_load)) {
@@ -838,11 +840,35 @@
                 }
             }.bind(this);
             var _switch = function() {
-                var switch_current_view = (function() {
+                var set_container = function() {
+                    this.screen_container.set(this.current_view.el);
+                    return this.display().done(function() {
+                        this.set_cursor();
+                        if (this.switch_callback) {
+                            this.switch_callback();
+                        }
+                    }.bind(this));
+                }.bind(this);
+                var continue_loop = function() {
+                    if (!view_type && (view_id === null)) {
+                        return false;
+                    }
+                    if (view_type && !view_id && !this.view_to_load.length) {
+                        return false;
+                    }
+                    return true;
+                }.bind(this);
+                var set_current_view = function() {
                     this.current_view = this.views[this.views.length - 1];
-                    return _switch();
+                }.bind(this);
+                var switch_current_view = (function() {
+                    set_current_view();
+                    if (continue_loop()) {
+                        return _switch();
+                    } else {
+                        return set_container();
+                    }
                 }.bind(this));
-
                 var is_view_id = function(view) {
                     return view.view_id == view_id;
                 };
@@ -852,27 +878,18 @@
                         return this.load_next_view().then(switch_current_view);
                     } else if ((view_id !== null) &&
                         !this.views.find(is_view_id)) {
-                        return this.add_view_id(view_id, view_type).then(
-                            switch_current_view);
+                        return this.add_view_id(view_id, view_type)
+                            .then(set_current_view);
                     } else {
                         var i = this.views.indexOf(this.current_view);
                         this.current_view = this.views[
                             (i + 1) % this.views.length];
                     }
-                    if (!view_id && (view_id === null)) {
-                        break;
-                    }
-                    if (view_type && !view_id && !this.view_to_load.length) {
+                    if (!continue_loop()) {
                         break;
                     }
                 }
-                this.screen_container.set(this.current_view.el);
-                return this.display().done(function() {
-                    this.set_cursor();
-                    if (this.switch_callback) {
-                        this.switch_callback();
-                    }
-                }.bind(this));
+                return set_container();
             }.bind(this);
             return _switch();
         },
diff -r 995a3dd59041 -r c6d4386ad622 src/tab.js
--- a/src/tab.js        Fri Mar 08 18:38:16 2019 +0100
+++ b/src/tab.js        Fri Mar 15 11:14:16 2019 +0100
@@ -490,6 +490,7 @@
             this.set_buttons_sensitive();
 
             this.view_prm = this.screen.switch_view().done(function() {
+                this.screen.count_tab_domain();
                 this.set_name(attributes.name || '');
                 this.content.append(screen.screen_container.el);
                 if (attributes.res_id) {

Reply via email to