Adding destroy method, as suggested by @bartvde
This commit is contained in:
@@ -170,11 +170,25 @@ OpenLayers.TileManager = OpenLayers.Class({
|
|||||||
var layer = evt.layer;
|
var layer = evt.layer;
|
||||||
if (layer instanceof OpenLayers.Layer.Grid) {
|
if (layer instanceof OpenLayers.Layer.Grid) {
|
||||||
this.clearTileQueue({object: layer});
|
this.clearTileQueue({object: layer});
|
||||||
layer.events.un({
|
if (layer.events) {
|
||||||
addtile: this.addTile,
|
layer.events.un({
|
||||||
retile: this.clearTileQueue,
|
addtile: this.addTile,
|
||||||
scope: this
|
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);
|
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");
|
t.ok(tileManager.tileQueue.length, "Tiles queued from added layer");
|
||||||
map.destroy();
|
map.destroy();
|
||||||
t.eq(tileManager.tileQueue.length, 0, "Tiles unqueued when map is destroyed");
|
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) {
|
function test_manageTileCache(t) {
|
||||||
|
|||||||
Reference in New Issue
Block a user