1

コントロールクラスを作成するために Google マップ drawingManager を使用しています。しかし、この行でjavascriptエラーが発生しました。

// Switch back to non-drawing mode after drawing a shape.
this.drawingManager.setDrawingMode(null);

キャッチされていない TypeError: 未定義のメソッド 'setDrawingMode' を呼び出せません

このエラーをクリアする方法を教えてもらえますか? どうもありがとうございました!

function DrawingManagerCtrl() {
    this.drawingManager = new google.maps.drawing.DrawingManager({
        // drawingMode: google.maps.drawing.OverlayType.MARKER,
        drawingControlOptions : {
            position : google.maps.ControlPosition.TOP_CENTER,
            drawingModes : [ google.maps.drawing.OverlayType.RECTANGLE ]
        },
    });

    google.maps.event.addListener(this.drawingManager, 'overlaycomplete', function(e) {
        // Switch back to non-drawing mode after drawing a shape.
        this.drawingManager.setDrawingMode(null);
    });
};

DrawingManagerCtrl.prototype = {
    drawingManager : null,
};
4

2 に答える 2

0

私はその特定の API を知りませんがthis、イベント ハンドラー関数内はその外側と同じではないthisので、クロージャーを作成しているという事実を使用する必要があると思われます。

function DrawingManagerCtrl() {
    var self = this; // <==== Create a variable for the closure to close over
    this.drawingManager = new google.maps.drawing.DrawingManager({
        // drawingMode: google.maps.drawing.OverlayType.MARKER,
        drawingControlOptions : {
            position : google.maps.ControlPosition.TOP_CENTER,
            drawingModes : [ google.maps.drawing.OverlayType.RECTANGLE ]
        },
    });

    google.maps.event.addListener(this.drawingManager, 'overlaycomplete', function(e) {
        // Switch back to non-drawing mode after drawing a shape.
        self.drawingManager.setDrawingMode(null);
        // ^ Use it
    });
};

this、JavaScript では、関数が定義されている場所ではなく、関数の呼び出し方法によって決定されます。そのため、Google マップthisでイベント コールバックで何を使用するかを指定できない限り、thisオブジェクトは参照されません。クロージャーを使用するとself、代わりに変数 (上記の ) を使用できます。

さらに読む(貧血の小さなブログで):

于 2012-11-19T16:18:28.550 に答える