Adding destroy method, as suggested by @bartvde
This commit is contained in:
@@ -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<ii; ++i) {
|
||||
this.removeLayer({layer: map.layers[i]});
|
||||
}
|
||||
}
|
||||
if (map.events) {
|
||||
map.events.un({
|
||||
move: this.move,
|
||||
zoomend: this.zoomEnd,
|
||||
addlayer: this.addLayer,
|
||||
removelayer: this.removeLayer,
|
||||
scope: this
|
||||
});
|
||||
}
|
||||
this.map = null;
|
||||
this.tileQueue = null;
|
||||
if (this.tileCache !== OpenLayers.TileManager.prototype.tileCache) {
|
||||
this.tileCache = null;
|
||||
this.tileCacheIndex = null;
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
@@ -19,6 +19,25 @@
|
||||
t.ok(tileManager.tileQueue.length, "Tiles queued from added layer");
|
||||
map.destroy();
|
||||
t.eq(tileManager.tileQueue.length, 0, "Tiles unqueued when map is destroyed");
|
||||
tileManager.destroy();
|
||||
}
|
||||
|
||||
function test_destroy(t) {
|
||||
t.plan(3);
|
||||
|
||||
var map = new OpenLayers.Map('map');
|
||||
var layer = new OpenLayers.Layer.WMS('WMS', '../img/blank.gif');
|
||||
map.addLayer(layer);
|
||||
map.setCenter([16, 48], 9);
|
||||
var numTileListeners = (layer.grid[0][0].events.listeners.reload || []).length;
|
||||
var numLayerListeners = (layer.events.listeners.retile || []).length;
|
||||
var numMapListeners = (map.events.listeners.removelayer || []).length;
|
||||
var tileManager = new OpenLayers.TileManager({map: map});
|
||||
tileManager.destroy();
|
||||
t.eq(layer.grid[0][0].events.listeners.reload.length, numTileListeners, "no listener on tile after destroy");
|
||||
t.eq(layer.events.listeners.retile.length, numLayerListeners, "no listeners on layer after destroy");
|
||||
t.eq(map.events.listeners.removelayer.length, numMapListeners, "no listeners on map after destroy");
|
||||
map.destroy();
|
||||
}
|
||||
|
||||
function test_manageTileCache(t) {
|
||||
|
||||
Reference in New Issue
Block a user