我有一个MapHandler类。
我创建了一个对象myMaphandler = new MapHandler,并调用了initialize方法。
但是@ userLocationMarker.getPosition()返回null :(
如果我要注释警报并从Chrome JS控制台调用@ userLocationMarker.getPosition(),我将获得必要的坐标。
class window.MapHandler
initialize: (centerLocation) ->
@makeMap(centerLocation)
@defineUserLocation()
alert @userLocationMarker.getPosition()
makeMap: (centerLocation) ->
myOptions =
zoom: 14
center: centerLocation
mapTypeId: google.maps.MapTypeId.ROADMAP
@map = new google.maps.Map(document.getElementById("map_canvas"), myOptions)
placeMarker: (location, icon_path) ->
if icon_path
markerImage = new google.maps.MarkerImage(icon_path, null, null, null, new google.maps.Size(25, 25))
else
markerImage = null
marker = new google.maps.Marker(
position: location
map: @map
icon: markerImage)
defineUserLocation: () ->
@userLocationMarker = @placeMarker(null, null)
handleMap = (position) =>
pos = new google.maps.LatLng(position.coords.latitude, position.coords.longitude)
infowindow = new google.maps.InfoWindow(
map: @map
position: pos
content: 'Если это не ваше местоположение - передвиньте маркер'
)
@map.setCenter(pos)
@userLocationMarker.setPosition(pos)
if navigator.geolocation
@userPosition = navigator.geolocation.getCurrentPositon(
handleMap
)
LINK
为什么会发生这种情况,为避免这种情况我该怎么做?
最佳答案
用@userLocationMarker
位置初始化null
:
@userLocationMarker = @placeMarker(null, null)
然后在
handleMap
中设置“真实”位置:handleMap = (position) =>
#...
@userLocationMarker.setPosition(pos)
用作
getCurrentPosition
的回调:if navigator.geolocation
@userPosition = navigator.geolocation.getCurrentPosition(
handleMap
)
问题是
getCurrentPosition
是异步的,因此在alert
调用handleMap
之前将调用您的getCurrentPosition
。取决于getCurrentPosition
所做的任何事情都必须在handleMap
回调中,否则它们需要准备好处理尚未到达的数据。您的示例代码中还有一个错字,您在
getCurrentPosition
块中拼写了if navigator.geolocation
错误。当您尝试从JavaScript控制台检查位置时,
getCurrentPosition
调用了handleMap
,并且@userLocationMarker
的位置已正确初始化。