make SelectControl.unselectAll safer

This commit is contained in:
Éric Lemoine
2012-05-29 23:01:36 +02:00
parent bd27f6a2ae
commit e603b06715
2 changed files with 34 additions and 2 deletions

View File

@@ -306,8 +306,12 @@ OpenLayers.Control.SelectFeature = OpenLayers.Class(OpenLayers.Control, {
layer = layers[l];
for(var i=layer.selectedFeatures.length-1; i>=0; --i) {
feature = layer.selectedFeatures[i];
if(!options || options.except != feature) {
this.unselect(feature);
// feature can be undefined here if an unselectfeature
// listeners has unselected or removed other features
if(feature) {
if(!options || options.except != feature) {
this.unselect(feature);
}
}
}
}

View File

@@ -558,6 +558,34 @@
t.eq(layer1.renderer.getRenderLayerId(), layer1.id,
"Root container moved correctly when control is destroyed and layers was an array parameter");
}
function test_unselectAll(t) {
t.plan(1);
var layer = new OpenLayers.Layer.Vector();
var control = new OpenLayers.Control.SelectFeature(layer);
var feature1 = new OpenLayers.Feature.Vector();
var feature2 = new OpenLayers.Feature.Vector();
var feature3 = new OpenLayers.Feature.Vector();
layer.addFeatures([feature1, feature2, feature3]);
control.select(feature1);
control.select(feature2);
control.select(feature3);
layer.events.on({
featureunselected: function(e) {
layer.removeFeatures([feature2]);
}
});
control.unselectAll();
t.eq(layer.selectedFeatures.length, 0,
'unselectAll unselects all features');
}
</script>
</head>