From ad89a80375c85ff22c2d58a571505cad7b1d1f92 Mon Sep 17 00:00:00 2001 From: Thierry Parmentelat Date: Thu, 5 Dec 2013 11:32:00 +0100 Subject: [PATCH] split data and dataview --- plugins/querytable/__init__.py | 1 + plugins/querytable/static/js/querytable.js | 19 +++++++++++++------ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/plugins/querytable/__init__.py b/plugins/querytable/__init__.py index dfd84f4a..de7fcbcc 100644 --- a/plugins/querytable/__init__.py +++ b/plugins/querytable/__init__.py @@ -106,6 +106,7 @@ Current implementation makes the following assumptions "js/slick.formatters.js", "js/slick.editors.js", "js/slick.grid.js", + "js/slick.dataview.js", # "js/dataTables.js", "js/dataTables.bootstrap.js", "js/with-datatables.js", "js/manifold.js", "js/manifold-query.js", diff --git a/plugins/querytable/static/js/querytable.js b/plugins/querytable/static/js/querytable.js index 9eeb86cf..cc1adf37 100644 --- a/plugins/querytable/static/js/querytable.js +++ b/plugins/querytable/static/js/querytable.js @@ -91,7 +91,14 @@ enableColumnReorder: true, }; - this.slick_data=[]; + this.slick_data = []; + this.slick_dataview = new Slick.Data.DataView(); + var self=this; + this.slick_dataview.onRowCountChanged.subscribe ( function (e,args) { + self.slick_grid.updateRowCount(); + self.slick_grid.autosizeColumns(); + self.slick_grid.render(); + }); var selector="#grid-"+this.options.domid; if (debug_deep) { @@ -108,7 +115,7 @@ cssClass: "slick-cell-checkboxsel" }); this.slick_columns.push(checkbox_selector.getColumnDefinition()); - this.slick_grid = new Slick.Grid(selector, this.slick_data, this.slick_columns, this.slick_options); + this.slick_grid = new Slick.Grid(selector, this.slick_dataview, this.slick_columns, this.slick_options); this.slick_grid.setSelectionModel (new Slick.RowSelectionModel ({selectActiveRow: false})); this.slick_grid.registerPlugin (checkbox_selector); // autotooltips: for showing the full column name when ellipsed @@ -145,6 +152,8 @@ }, new_record: function(record) { + // xxx having a field named 'id' is a requirement from dataview + record['id']=record[this.key]; this.slick_data.push(record); }, @@ -343,11 +352,9 @@ on_all_query_done: function() { if (debug) messages.debug("1-shot initializing dataTables content with " + this.slick_data.length + " lines"); var start=new Date(); - this.slick_grid.setData (this.slick_data, true); - this.slick_grid.autosizeColumns(); - this.slick_grid.render(); + this.slick_dataview.setItems (this.slick_data); var duration=new Date()-start; - if (debug) messages.debug("setData+render took " + duration + " ms"); + if (debug) messages.debug("setItems " + duration + " ms"); if (debug_deep) { // show full contents of first row app for (k in this.slick_data[0]) messages.debug("slick_data[0]["+k+"]="+this.slick_data[0][k]); -- 2.43.0