gpt4 book ai didi

javascript - CoffeeScript 对象属性和闭包

转载 作者:行者123 更新时间:2023-11-28 12:45:27 25 4
gpt4 key购买 nike

我有一个 MapHandler 类。

我创建了一个对象 myMaphandler = new MapHandler 并调用了初始化方法。但 @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

为什么会发生这种情况以及我应该采取什么措施来避免这种情况?

最佳答案

您使用 null 位置初始化 @userLocationMarker:

@userLocationMarker = @placeMarker(null, null)

然后在handleMap中设置“真实”位置:

handleMap = (position) =>
#...
@userLocationMarker.setPosition(pos)

用作getCurrentPosition的回调:

if navigator.geolocation
@userPosition = navigator.geolocation.getCurrentPosition(
handleMap
)

问题在于 getCurrentPosition 是异步的,因此您的 alerthandleMapgetCurrentPosition 调用之前被调用>。任何依赖于 getCurrentPosition 所做的事情都必须在 handleMap 回调中,否则它们需要准备好处理尚未到达的数据。

您的示例代码中也存在拼写错误,您在 if navigator.geolocation block 中拼写了 getCurrentPosition 错误。

当您尝试从 JavaScript 控制台检查位置时,getCurrentPosition 已调用 handleMap 并且 @userLocationMarker 将正确确定其位置已初始化。

关于javascript - CoffeeScript 对象属性和闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8159265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com