rko*_*v93 0 javascript variables closures coffeescript
我有一个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
)
Run Code Online (Sandbox Code Playgroud)
为什么会出现这种情况以及为避免这种情况我应该做些什么
你@userLocationMarker用一个null位置初始化:
@userLocationMarker = @placeMarker(null, null)
Run Code Online (Sandbox Code Playgroud)
然后你设置"真正的"位置handleMap:
handleMap = (position) =>
#...
@userLocationMarker.setPosition(pos)
Run Code Online (Sandbox Code Playgroud)
用作回调getCurrentPosition:
if navigator.geolocation
@userPosition = navigator.geolocation.getCurrentPosition(
handleMap
)
Run Code Online (Sandbox Code Playgroud)
问题是它getCurrentPosition是异步的,因此在alert被调用之前就会handleMap调用它getCurrentPosition.凡是取决于什么getCurrentPosition呢必须是在handleMap回调或他们需要准备应对还未到达的数据.
您的示例代码中也存在拼写getCurrentPosition错误,您在if navigator.geolocation块中拼写错误.
当您尝试从JavaScript控制台检查位置时,getCurrentPosition已调用handleMap并且@userLocationMarker已正确初始化其位置.
| 归档时间: |
|
| 查看次数: |
684 次 |
| 最近记录: |