diff --git a/src/ol/interaction/modifyinteraction.js b/src/ol/interaction/modifyinteraction.js index 0888551fb9..a3cde4bd63 100644 --- a/src/ol/interaction/modifyinteraction.js +++ b/src/ol/interaction/modifyinteraction.js @@ -69,11 +69,11 @@ goog.inherits(ol.interaction.Modify, ol.interaction.Drag); /** - * @param {ol.layer.VectorLayerEventObject} evt Event object. + * @param {ol.layer.Vector} layer The vector layer. + * @param {Array.} features Array of features. + * @private */ -ol.interaction.Modify.prototype.addIndex = function(evt) { - var layer = evt.target; - var features = evt.features; +ol.interaction.Modify.prototype.addIndex_ = function(layer, features) { for (var i = 0, ii = features.length; i < ii; ++i) { var feature = features[i]; var geometry = feature.getGeometry(); @@ -89,6 +89,16 @@ ol.interaction.Modify.prototype.addIndex = function(evt) { }; +/** + * Listen for feature additions. + * @param {ol.layer.VectorLayerEventObject} evt Event object. + * @private + */ +ol.interaction.Modify.prototype.handleFeaturesAdded_ = function(evt) { + this.addIndex_(evt.target, evt.features); +}; + + /** * @param {ol.layer.Layer} layer Layer. */ @@ -104,11 +114,11 @@ ol.interaction.Modify.prototype.addLayer = function(layer) { selectionLayer.addFeatures([vertexFeature]); editData.vertexFeature = vertexFeature; } - this.addIndex(/** @type {ol.layer.VectorLayerEventObject} */ - ({target: selectionLayer, features: goog.object.getValues( - selectionData.selectedFeaturesByFeatureUid)})); + this.addIndex_(selectionLayer, + goog.object.getValues(selectionData.selectedFeaturesByFeatureUid)); + goog.events.listen(selectionLayer, ol.layer.VectorLayerEventType.ADD, - this.addIndex, false, this); + this.handleFeaturesAdded_, false, this); goog.events.listen(selectionLayer, ol.layer.VectorLayerEventType.REMOVE, this.removeIndex, false, this); }; @@ -270,8 +280,10 @@ ol.interaction.Modify.prototype.handleMouseMove_ = function(evt) { var layer = layers[i]; var selectionLayer = layer.getSelectionData().layer; if (!goog.isNull(selectionLayer)) { - if (goog.isNull(goog.events.getListener(selectionLayer, - ol.layer.VectorLayerEventType.ADD, this.addIndex, false, this))) { + var listener = goog.events.getListener(selectionLayer, + ol.layer.VectorLayerEventType.ADD, + this.handleFeaturesAdded_, false, this); + if (goog.isNull(listener)) { this.addLayer(layer); } var editData = selectionLayer.getEditData();