为什么地理定位数据没有从助手返回到模板

Why geolocation data in not returning from the helper to the template

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

如您所见,应该在 <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,但是 为什么来自回调的信息没有进入模板,以及如何修复它?

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

当时助手 return 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

你会得到第一个 console.log 因为此刻你 return 模板的值是 ''

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