1 votos

JS API - onDrawEnd disparando dos veces

Tengo una sencilla aplicación de edición con el siguiente código:

startEditing : function(template) {

    var drawingTool = template.template.drawingTool;

    switch(drawingTool) {
        case FeatureTemplate.TOOL_POINT:
            drawingTool = Draw.POINT;
            break;
        }

    on(this.drawingToolbar, "draw-end", lang.hitch(this, this.createFeature, template));

    this.drawingToolbar.activate(drawingTool);
}

y

createFeature : function(template, evt) {

    var featureLayer = template.featureLayer;
    template = template.template;

    var prototype = template.prototype;

    var geometry = evt.geometry;

    var graphic = new Graphic(prototype.toJson());
    graphic.setGeometry(geometry);

    this.initAttributes(graphic, featureLayer).then(function() {

        var features = [graphic];

        featureLayer.applyEdits(features).then(function(addResults) {
            var objectIds = array.map(addResults, function(addResult) {
                return addResult.objectId;
            });

            var q = new Query();
            q.objectIds = objectIds;

            featureLayer.selectFeatures(q).then(function(features) {
                main.openForm(features);
            });
        });

    });

}

Utilizando una herramienta de punto con la barra de herramientas de dibujo, me encuentro con que cuando hago clic en un punto del mapa, la función createFeature se llama dos veces, lo que resulta en la creación de 2 características con la misma geometría. ¿Cómo puedo evitar que la barra de herramientas de dibujo cree 2 características?

0voto

user2923 Puntos 21

Resulta que la razón por la que esto ocurría es porque es posible que el startEditing sea llamada varias veces, ya que esta función es llamada cada vez que el templatePicker cambios de selección. Cada vez que el startEditing crea un nuevo onDrawEnd manipulador.

También hay un stopEditing que se llama cuando el templatePicker la selección cambia y la selección es null . Mi solución fue añadir un código que me permite eliminar el onDrawEnd dentro del stopEditing función.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X