为什么地理定位数据没有从助手返回到模板
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值。
这是我的 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值。