From: Thierry Parmentelat <thierry.parmentelat@inria.fr>
Date: Thu, 5 Dec 2013 10:32:00 +0000 (+0100)
Subject: split data and dataview
X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=ad89a80375c85ff22c2d58a571505cad7b1d1f92;p=myslice.git

split data and dataview
---

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]);