这是我的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,但为什么来自回调的信息不会转到模板,以及如何修复 ?
答案 0 :(得分: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
并且你将获得第一个console.log,因为此时你将值返回给模板,值为''
Session变量有效,因为Session是一个被动数据,也有助手运行assyncronus,所以首先帮助器查找Session.get('location')
wich值是''
但是有几秒钟当地理定位的回调完成时,会话的值不同,并且帮助程序的计算重新运行该函数并返回该值。