diff --git a/lib/OpenLayers/Layer/Vector.js b/lib/OpenLayers/Layer/Vector.js index 484b7bbe83..f4150faba5 100644 --- a/lib/OpenLayers/Layer/Vector.js +++ b/lib/OpenLayers/Layer/Vector.js @@ -262,6 +262,14 @@ OpenLayers.Layer.Vector.prototype = } }, + /** + */ + destroyFeatures: function () { + for (var i = this.features.length - 1; i >= 0; i--) { + this.features[i].destroy(); + } + }, + /** * @param {String} fid * @param {Object} style diff --git a/lib/OpenLayers/Layer/WFS.js b/lib/OpenLayers/Layer/WFS.js index d9902ec52c..9a927e1fa0 100644 --- a/lib/OpenLayers/Layer/WFS.js +++ b/lib/OpenLayers/Layer/WFS.js @@ -188,6 +188,7 @@ OpenLayers.Layer.WFS.prototype = this.tile.draw(); } else { if (this.vectorMode) { + this.destroyFeatures(); this.renderer.clear(); } else { this.clearMarkers(); diff --git a/tests/Layer/test_Vector.html b/tests/Layer/test_Vector.html index 97e50cf295..6210c0d17f 100644 --- a/tests/Layer/test_Vector.html +++ b/tests/Layer/test_Vector.html @@ -45,7 +45,7 @@ t.ok(layer.features.length == 1, "OpenLayers.Layer.Vector.removeFeatures removes a feature from the features array"); } - function test_Layer_Vector_addsStyle (t) { + function test_Layer_Vector_addStyle (t) { t.plan(2); layer = new OpenLayers.Layer.Vector(name); var map = new OpenLayers.Map('map'); @@ -56,6 +56,22 @@ t.ok( f.style != null, "Feature style is set by layer."); } + function test_Layer_Vector_destroyFeatures (t) { + t.plan(2); + layer = new OpenLayers.Layer.Vector(name); + var map = new OpenLayers.Map('map'); + map.addLayer(layer); + var features = []; + for (var i = 0; i < 5; i++) { + features.push(new OpenLayers.Feature.Vector( + new OpenLayers.Geometry.Point(0,0))); + } + layer.addFeatures(features); + t.eq(layer.features.length, 5, "addFeatures adds 5 features"); + layer.destroyFeatures(); + t.eq(layer.features.length, 0, "destroyFeatures triggers removal"); + } + function test_99_Layer_Vector_destroy (t) { t.plan(1); layer = new OpenLayers.Layer.Vector(name);