[OpenLayers-Dev] Patch for Handling Removal of Child Layers from OpenLayers.Layer.Vector.RootContainer

Adam Ratcliffe adam at prema.co.nz
Sun Jul 4 00:26:24 EDT 2010


Hi,

I'm using OpenLayers 2.9.1 and I found that if I have a SelectFeature control configured for multiple layers, and that the control is active when I delete one of the layers the control is configured for, that the deleted layer's features are not removed from the map.

Through modifying the control's RootContainer to listen for map 'removelayer' events, and in the event handler removing its copy of the layer data, I am able to completely remove the layer when the control is active.  Below is my patch to OpenLayers.Layer.Vector.RootContainer.

I'm not sure if the call: this.renderer.eraseFeatures(layer.features); is the right way to go about removing the rendered features for the deleted layer but it seems to work in practice.

Cheers
Adam

OpenLayers.Layer.Vector.RootContainer.prototype.setMap = function(map) {
    OpenLayers.Layer.Vector.prototype.setMap.apply(this, arguments);
    this.collectRoots();
    map.events.on({
        'changelayer': this.handleChangeLayer,
        'removelayer': this.handleRemoveLayer,
        scope: this
    });
};

OpenLayers.Layer.Vector.RootContainer.prototype.handleRemoveLayer = function(evt) {
    var layer = evt.layer;
    for(var i = 0; i < this.layers.length; i++) {
        if(layer == this.layers[i]) {
            this.layers.splice(i, 1);
            this.renderer.eraseFeatures(layer.features);
            return;
        }
    }
};


More information about the Dev mailing list