[pve-devel] r5805 - in pve-manager/pve2/www/new: grid tree

svn-commits at proxmox.com svn-commits at proxmox.com
Fri Apr 8 12:56:41 CEST 2011


Author: dietmar
Date: 2011-04-08 12:56:41 +0200 (Fri, 08 Apr 2011)
New Revision: 5805

Modified:
   pve-manager/pve2/www/new/grid/ResourceGrid.js
   pve-manager/pve2/www/new/tree/ResourceTree.js
Log:
test using buffered grid


Modified: pve-manager/pve2/www/new/grid/ResourceGrid.js
===================================================================
--- pve-manager/pve2/www/new/grid/ResourceGrid.js	2011-04-08 07:53:40 UTC (rev 5804)
+++ pve-manager/pve2/www/new/grid/ResourceGrid.js	2011-04-08 10:56:41 UTC (rev 5805)
@@ -1,18 +1,111 @@
 Ext.define('PVE.grid.ResourceGrid', {
     extend: 'Ext.grid.GridPanel',
-    requires: ['PVE.Utils', 
-	       'PVE.data.ResourceStore'],
+    requires: [
+	'Ext.grid.*',
+	'Ext.data.*',
+	'Ext.data.BufferStore',
+	'Ext.util.*',
+	'Ext.grid.PagingScroller',
+	'PVE.Utils', 
+	'PVE.data.ResourceStore'
+    ],
     alias: ['widget.pveResourceGrid'],
 
     
     initComponent : function() {
 	var me = this;
 
-	var store = PVE.data.ResourceStore;
+	var rstore = PVE.data.ResourceStore;
 
+	var store = Ext.create('Ext.data.BufferStore', {
+            pageSize: 50,
+            purgePageCount: 0,
+	    model: 'PVEResources',
+	    proxy: { type: 'memory' }
+	});
+
+	var pdata = {
+	    dataIndex: {},
+	    updateCount: 0
+	};
+
+	var updateGrid = function() {
+
+	    var index = pdata.dataIndex;
+
+	    var filterfn = null;
+	    
+	    console.log("START GRID UPDATE");
+
+	    // remove vanished or changed items
+	    var rmlist = [];
+	    for (var key in index) {
+		if (!index.hasOwnProperty(key))
+		    continue;
+
+		var olditem = index[key];
+
+		// getById() use find(), which is slow (ExtJS4 beta2) 
+		//var item = rstore.getById(olditem.data.id);
+		var item = rstore.data.get(olditem.data.id);
+
+		if (!item) {
+		    console.log("GRID REM UID: " + key + " ITEM " + olditem.data.id);
+		    delete index[key];
+		    rmlist.push(item);
+
+		}
+	    }
+	    if (rmlist.length) 
+		store.remove(rmlist);
+
+ 	    // add new items
+	    var addlist = [];
+            rstore.each(function(item) {
+		var olditem = index[item.data.id];
+		if (olditem)
+		    return;
+
+		if (filterfn && !filterfn(item))
+		    return;
+
+		//console.log("GRID ADD UID: " + item.data.id);
+
+		var info = Ext.apply({}, item.data);
+		var child = Ext.ModelMgr.create(info, store.model, info.id);
+		addlist.push(item);
+		index[item.data.id] = child;
+	    });
+
+	    if (addlist.length) {
+		store.cacheRecords(addlist);
+		store.guaranteeRange(0, 49);
+	    }
+
+	    console.log("END GRID UPDATE");
+	    if (!pdata.updateCount) {
+		//self.applyState(sp.get(stateid));
+	    }
+
+	    pdata.updateCount++;
+	};
+
 	Ext.apply(me, {
 	    title: 'Search',
 	    store: store,
+	    viewConfig: {
+		trackOver: false
+            },
+            invalidateScrollerOnRefresh: false,
+	    verticalScroller: {
+		xtype: 'paginggridscroller',
+		activePrefetch: false
+            },
+ 	    listeners: {
+		destroy: function() {
+		    rstore.un("load", updateGrid)
+		}
+	    },
             columns:[{
 		text: 'ID',
 		dataIndex: 'id'
@@ -20,5 +113,8 @@
 	});
 
 	me.callParent();
+
+	updateGrid();
+	rstore.on("load", updateGrid);
     }
 });
\ No newline at end of file

Modified: pve-manager/pve2/www/new/tree/ResourceTree.js
===================================================================
--- pve-manager/pve2/www/new/tree/ResourceTree.js	2011-04-08 07:53:40 UTC (rev 5804)
+++ pve-manager/pve2/www/new/tree/ResourceTree.js	2011-04-08 10:56:41 UTC (rev 5805)
@@ -186,6 +186,8 @@
 
 	var updateTree = function() {
 
+	    // fixme: suspend events ?
+
 	    var rootnode = self.store.getRootNode();
 
 	    var index = pdata.dataIndex;



More information about the pve-devel mailing list