0

dojo私は、ESRI Javascript APIを使用して Javascript Web アプリケーションを開発しました。アプリケーションのメイン ページは、ユーザーがマップ上にポイントを追加できるマップ ビューです。

onClick私のデスクトップ Web ブラウザーでは、マップをクリックすると新しいポイントが 1 つ追加され、デバッグすると、ハンドラーが 1 回だけ呼び出されることがわかります。

私の iPad では、マップをタップすると、まったく同じ場所に 2 つのポイントが追加されます。onClickMacbook Pro の Safari を介して iPad でアプリをデバッグすると、ハンドラーが 2 回呼び出されていることがわかります。onClickさらにデバッグを行った結果、ハンドラーを作成するコードが 1 回だけ呼び出されることを確認しました。

startEditing : function(template) {

    main.selectHandle.pause();
    main.moveHandle.pause();

    var drawingTool = template.template.drawingTool;

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

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

    this.drawingToolbar.activate(drawingTool);
},

stopEditing : function() {

    this.drawingToolbar.deactivate();
    this.drawEndHandle.remove();

    main.selectHandle.resume();
    main.moveHandle.resume();

},

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);
            });
        });

    });

},

上記drawingToolbarstartEditing関数は ESRI Javascript API によって提供されますが、onClickイベントを内部でonDrawEnd処理し、コードで処理しているイベントに渡します。イベントを直接処理する他のコードがonClickあり、それも 2 回発生します。

アップデート

Android スマートフォンで同じ機能をテストしたところonClick、1 回のタップでイベントが 2 回発生しました。

4

1 に答える 1