From 9609bb1449b2ff945695af91adf603fe16f2368e Mon Sep 17 00:00:00 2001 From: ahocevar Date: Thu, 29 Nov 2012 15:33:49 -0600 Subject: [PATCH] Adding destroy method, as suggested by @bartvde --- lib/OpenLayers/TileManager.js | 49 +++++++++++++++++++++++++++++++---- tests/TileManager.html | 19 ++++++++++++++ 2 files changed, 63 insertions(+), 5 deletions(-) diff --git a/lib/OpenLayers/TileManager.js b/lib/OpenLayers/TileManager.js index db035c6e07..8d75c0f499 100644 --- a/lib/OpenLayers/TileManager.js +++ b/lib/OpenLayers/TileManager.js @@ -170,11 +170,25 @@ OpenLayers.TileManager = OpenLayers.Class({ var layer = evt.layer; if (layer instanceof OpenLayers.Layer.Grid) { this.clearTileQueue({object: layer}); - layer.events.un({ - addtile: this.addTile, - retile: this.clearTileQueue, - scope: this - }); + if (layer.events) { + layer.events.un({ + addtile: this.addTile, + retile: this.clearTileQueue, + scope: this + }); + } + if (layer.grid) { + var i, j, tile; + for (i=layer.grid.length-1; i>=0; --i) { + for (j=layer.grid[i].length-1; j>=0; --j) { + tile = layer.grid[i][j]; + this.unloadTile({object: tile}); + if (tile.url) { + this.manageTileCache({object: tile}); + } + } + } + } } }, @@ -322,6 +336,31 @@ OpenLayers.TileManager = OpenLayers.Class({ this.tileQueue.splice(i, 1); } } + }, + + destroy: function() { + window.clearTimeout(this.tileQueueId); + var map = this.map; + if (map.layers) { + for (var i=0, ii=map.layers.length; i