Clean up layer renderers when layers changes

This commit is contained in:
Tom Payne
2012-07-18 23:37:12 +02:00
parent 376d75ea4f
commit eb43cf14c1
+9
View File
@@ -442,12 +442,21 @@ ol.Map.prototype.handleLayersSetAt = function(event) {
/** /**
*/ */
ol.Map.prototype.handleLayersChanged = function() { ol.Map.prototype.handleLayersChanged = function() {
var layerRenderers = goog.object.getValues(this.layerRenderers);
goog.array.forEach(layerRenderers, function(layerRenderer) {
this.removeLayerRenderer(layerRenderer);
}, this);
this.layerRenderers = {};
if (!goog.isNull(this.layersListenerKeys_)) { if (!goog.isNull(this.layersListenerKeys_)) {
goog.array.forEach(this.layersListenerKeys_, goog.events.unlistenByKey); goog.array.forEach(this.layersListenerKeys_, goog.events.unlistenByKey);
this.layersListenerKeys_ = null; this.layersListenerKeys_ = null;
} }
var layers = this.getLayers(); var layers = this.getLayers();
if (goog.isDefAndNotNull(layers)) { if (goog.isDefAndNotNull(layers)) {
goog.array.forEach(layers.getArray(), function(layer) {
var layerRenderer = this.createLayerRenderer(layer);
this.setLayerRenderer(layer, layerRenderer);
}, this);
this.layersListenerKeys_ = [ this.layersListenerKeys_ = [
goog.events.listen(layers, ol.ArrayEventType.INSERT_AT, goog.events.listen(layers, ol.ArrayEventType.INSERT_AT,
this.handleLayersInsertAt, false, this), this.handleLayersInsertAt, false, this),