From 4a4d9b29cdbd541a1f2e35b69cd75e1fea7612fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Lemoine?= Date: Fri, 25 Feb 2011 12:02:29 +0000 Subject: [PATCH] the grid layer needs to clear its tile loading timeout when it's removed from the map, or moveGriddedTiles can be called with this.map set to null, r=crschmidt (closes #3110) git-svn-id: http://svn.openlayers.org/trunk/openlayers@11482 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf --- lib/OpenLayers/Layer/Grid.js | 14 ++++++++++++++ tests/Layer/Grid.html | 4 +++- tests/Map.html | 6 ++++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/lib/OpenLayers/Layer/Grid.js b/lib/OpenLayers/Layer/Grid.js index e8938f827a..07229a4abd 100644 --- a/lib/OpenLayers/Layer/Grid.js +++ b/lib/OpenLayers/Layer/Grid.js @@ -131,6 +131,20 @@ OpenLayers.Layer.Grid = OpenLayers.Class(OpenLayers.Layer.HTTPRequest, { ); }, + /** + * Method: removeMap + * Called when the layer is removed from the map. + * + * Parameters: + * map - {} The map. + */ + removeMap: function(map) { + if(this.timerId != null) { + window.clearTimeout(this.timerId); + this.timerId = null; + } + }, + /** * APIMethod: destroy * Deconstruct the layer and clear the grid. diff --git a/tests/Layer/Grid.html b/tests/Layer/Grid.html index 80dd7300bd..a4dbcee53f 100644 --- a/tests/Layer/Grid.html +++ b/tests/Layer/Grid.html @@ -593,7 +593,7 @@ function test_Layer_Grid_destroy (t) { - t.plan( 7 ); + t.plan( 8 ); var map = new OpenLayers.Map('map'); layer = new OpenLayers.Layer.Grid(name, url, params); @@ -608,6 +608,7 @@ map.addLayer(layer); map.setCenter(new OpenLayers.LonLat(0,0), 10); + map.setCenter(new OpenLayers.LonLat(1,1)); //grab a reference to one of the tiles @@ -616,6 +617,7 @@ layer.destroy(); t.eq( tile.imgDiv, null, "Tile destroyed" ); + t.eq( layer.timerId, null, "Tile loading timeout cleared"); t.ok( layer.grid == null, "tiles appropriately destroyed") diff --git a/tests/Map.html b/tests/Map.html index 568b7e4c87..63c3cbca05 100644 --- a/tests/Map.html +++ b/tests/Map.html @@ -352,6 +352,8 @@ valid = OpenLayers.Map.prototype.isValidZoomLevel.apply(map, [19]); t.eq(valid, false, "19 is not a valid zoomLevel when baseLayer has restrictedMinZoom of 1"); + + map.destroy(); } function test_Map_isValidLonLat(t) { @@ -977,6 +979,8 @@ map.addControls(controls2, pixels2); t.eq(map.controls.length, 5, "three additional controls were added by map.addControls with a px-array"); t.eq(map.controls[3].position.toString(), pixels2[1].toString(), "control 'fourthctrl' has position set to given px"); + + map.destroy(); } function test_Map_getControl(t) { @@ -1598,6 +1602,8 @@ t.eq(map.layers.length, 2, "multiple layers added from options"); t.ok(map.baseLayer, "map has a base layer"); + + map.destroy(); }