2012-11-19 67 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> 
相关问题