Fix feature-layer association on replaced selections
This commit is contained in:
@@ -280,6 +280,7 @@ ol.interaction.Select.handleEvent = function(mapBrowserEvent) {
|
|||||||
// Replace the currently selected feature(s) with the feature(s) at the
|
// Replace the currently selected feature(s) with the feature(s) at the
|
||||||
// pixel, or clear the selected feature(s) if there is no feature at
|
// pixel, or clear the selected feature(s) if there is no feature at
|
||||||
// the pixel.
|
// the pixel.
|
||||||
|
ol.object.clear(this.featureLayerAssociation_);
|
||||||
map.forEachFeatureAtPixel(mapBrowserEvent.pixel,
|
map.forEachFeatureAtPixel(mapBrowserEvent.pixel,
|
||||||
/**
|
/**
|
||||||
* @param {ol.Feature|ol.render.Feature} feature Feature.
|
* @param {ol.Feature|ol.render.Feature} feature Feature.
|
||||||
@@ -303,16 +304,6 @@ ol.interaction.Select.handleEvent = function(mapBrowserEvent) {
|
|||||||
features.clear();
|
features.clear();
|
||||||
}
|
}
|
||||||
features.extend(selected);
|
features.extend(selected);
|
||||||
// Modify object this.featureLayerAssociation_
|
|
||||||
if (selected.length === 0) {
|
|
||||||
ol.object.clear(this.featureLayerAssociation_);
|
|
||||||
} else {
|
|
||||||
if (deselected.length > 0) {
|
|
||||||
deselected.forEach(function(feature) {
|
|
||||||
this.removeFeatureLayerAssociation_(feature);
|
|
||||||
}, this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Modify the currently selected feature(s).
|
// Modify the currently selected feature(s).
|
||||||
|
|||||||
@@ -181,6 +181,16 @@ describe('ol.interaction.Select', function() {
|
|||||||
|
|
||||||
var features = select.getFeatures();
|
var features = select.getFeatures();
|
||||||
expect(features.getLength()).to.equal(4);
|
expect(features.getLength()).to.equal(4);
|
||||||
|
expect(select.getLayer(features.item(0))).to.equal(layer);
|
||||||
|
|
||||||
|
// Select again to make sure the internal layer isn't reported
|
||||||
|
simulateEvent(ol.MapBrowserEvent.EventType.SINGLECLICK, 10, -20);
|
||||||
|
|
||||||
|
expect(listenerSpy.callCount).to.be(2);
|
||||||
|
|
||||||
|
features = select.getFeatures();
|
||||||
|
expect(features.getLength()).to.equal(4);
|
||||||
|
expect(select.getLayer(features.item(0))).to.equal(layer);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -312,6 +322,8 @@ describe('ol.interaction.Select', function() {
|
|||||||
interaction.on('select', listenerSpy);
|
interaction.on('select', listenerSpy);
|
||||||
|
|
||||||
simulateEvent(ol.MapBrowserEvent.EventType.SINGLECLICK, 10, -20);
|
simulateEvent(ol.MapBrowserEvent.EventType.SINGLECLICK, 10, -20);
|
||||||
|
// Select again to make sure that the internal layer doesn't get reported.
|
||||||
|
simulateEvent(ol.MapBrowserEvent.EventType.SINGLECLICK, 10, -20);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user