From 17d1d721df84a3fdd0e4fcf0b855692131ca9e43 Mon Sep 17 00:00:00 2001 From: Sergi Almacellas Abellana Date: Tue, 6 Sep 2016 12:40:03 +0200 Subject: [PATCH] Resolve display promise when all the rows of a tree view are displayed Since changeset 82c4ec24b675, the tree is drawn asynchronously but some methods may require the tree to be fully rendered to compute its values, so the display method must return a promise that resolves when all of the rows are displayed issue5849 review33331002 --- src/view/tree.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/view/tree.js b/src/view/tree.js index 44c590ad4e..ce84d6bc75 100644 --- a/src/view/tree.js +++ b/src/view/tree.js @@ -344,8 +344,7 @@ this.table.removeClass('responsive-header'); } - this.redraw(selected, expanded); - return jQuery.when(); + return this.redraw(selected, expanded); }, construct: function(selected, expanded, extend) { var tbody = this.tbody; @@ -377,7 +376,7 @@ } }, redraw: function(selected, expanded) { - redraw_async(this.rows, selected, expanded); + return redraw_async(this.rows, selected, expanded); }, switch_: function(path) { this.screen.row_activate(); @@ -577,6 +576,7 @@ function redraw_async(rows, selected, expanded) { var chunk = Sao.config.display_size; + var dfd = jQuery.Deferred(); var redraw_rows = function(i) { rows.slice(i, i + chunk).forEach(function(row) { row.redraw(selected, expanded); @@ -584,9 +584,12 @@ i += chunk; if (i < rows.length) { setTimeout(redraw_rows, 0, i); + } else { + dfd.resolve(); } }; setTimeout(redraw_rows, 0, 0); + return dfd; } Sao.View.Tree.Row = Sao.class_(Object, {