0

这是我的流星代码片段 - http://meteorpad.com/pad/sYoY8Xzjzd3sejFC4/Location

如您所见,in 应该在<p>标签中写入您的当前位置(您可以res[0].formatted_address通过打开浏览器控制台检查是否有任何数据 - 它应该包含您的当前位置)。

但由于某种原因<p>仍然是空的。

问题从navigator.geolocation.getCurrentPosition回调开始 - 如果我修改代码,所以数据在回调之外返回 - 数据转到<p>

例子:

Template.location.helpers
  location: ->
    navigator.geolocation.getCurrentPosition (position) ->
      if GoogleMaps.loaded()
        geocoder = new google.maps.Geocoder()
        geocoder.geocode {'latLng': new google.maps.LatLng(position.coords.latitude, position.coords.longitude)}, (res, status) ->
          console.log res[0].formatted_address
          res[0].formatted_address
    return 123

我尝试使用Session变量,它起作用了 - http://meteorpad.com/pad/nR4vgj7HqJvCdt3wE/Location-Session,但是为什么来自回调的信息不会进入模板,以及如何解决它

4

1 回答 1

1

那是因为res[0].formatted_address它不是像 Session 变量那样的反应性数据。

并且在助手返回res[0].formatted_address模板时,该值为“”。

你可以像这样检查它。

var test = res[0].formatted_address
 if test != ''
  console.log 'hi iam a non reactive value and also im returning nothing'
 else
   console.log "yea my response is " + res[0].formatted_address

而ofc你会得到第一个console.log,因为在你将值返回给模板的那一刻,值是''

Session 变量有效,因为 Session 是一个反应性数据,并且助手运行 assyncronus,所以首先助手查找该Session.get('location')值,'' 但是当地理定位上的回调完成会话的值不同并且帮助器的计算重新运行函数并返回值。

于 2015-04-16T21:32:44.667 回答