From 7b88f44a4181d92c52f590a830168b1091715fc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Lemoine?= Date: Sun, 11 Nov 2012 21:31:12 +0100 Subject: [PATCH] Keep track of tiles we're already listening on --- src/ol/renderer/dom/domtilelayerrenderer.js | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/ol/renderer/dom/domtilelayerrenderer.js b/src/ol/renderer/dom/domtilelayerrenderer.js index 782313a46d..7b3abd7d0d 100644 --- a/src/ol/renderer/dom/domtilelayerrenderer.js +++ b/src/ol/renderer/dom/domtilelayerrenderer.js @@ -32,6 +32,12 @@ ol.renderer.dom.TileLayer = function(mapRenderer, tileLayer, target) { * @private */ this.renderedMapResolution_ = undefined; + + /** + * @type {Object.} + * @private + */ + this.tileChangeListenerKeys_ = {}; }; goog.inherits(ol.renderer.dom.TileLayer, ol.renderer.dom.Layer); @@ -90,7 +96,11 @@ ol.renderer.dom.TileLayer.prototype.removeExtraTiles_ = * @private */ ol.renderer.dom.TileLayer.prototype.handleTileChange_ = function(event) { - goog.asserts.assert(event.target.getState() == ol.TileState.LOADED); + var tile = /** @type {ol.Tile} */ (event.target); + goog.asserts.assert(tile.getState() == ol.TileState.LOADED); + var tileKey = goog.getUid(tile); + goog.asserts.assert(tileKey in this.tileChangeListenerKeys_); + delete this.tileChangeListenerKeys_[tileKey]; this.render(); }; @@ -139,9 +149,12 @@ ol.renderer.dom.TileLayer.prototype.render = function() { tilesToDrawByZ[z][key] = tile; return; } else { - goog.events.listen(tile, goog.events.EventType.CHANGE, - this.handleTileChange_, false, this); - tile.load(); + var tileKey = goog.getUid(tile); + if (!(tileKey in this.tileChangeListenerKeys_)) { + this.tileChangeListenerKeys_[tileKey] = goog.events.listen(tile, + goog.events.EventType.CHANGE, this.handleTileChange_, false, this); + tile.load(); + } } /**