2012-11-19 69 views
1

我正在使用谷歌地圖drawingManager編寫控件類。 但在這一行發生JavaScript錯誤。Uncaught TypeError:無法調用未定義的方法'setDrawingMode'

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

Uncaught TypeError: Cannot call method 'setDrawingMode' of undefined

有人能幫助我如何清除這個錯誤? 非常感謝!

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

回答

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中,由函數是如何被調用來確定,而不是其中定義的功能。所以除非谷歌地圖的東西讓你指定它在事件回調中應該用於thisthis不會引用你的對象。通過使用閉包,您可以使用變量(上面的self)代替。

更多閱讀(我的貧血小博客):

+0

非常感謝您! – user1836330

+0

@ user1836330:不客氣!如果*回答了問題,那麼SO的工作方式就是「接受」答案:http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work但是隻有在它確實回答了你的問題。 –

0

你可以在谷歌地圖API連接庫都出錯了。

請確保您已經添加了幾何庫到腳本文件

<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&libraries=places,geometry,drawing"></script> 
相關問題