2015-04-16 2 views
0

Вот мой Метеор фрагмент кода - 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, но почему информация из обратного вызова не идет по шаблону и как его исправить?

ответ

1

Thats, потому что res[0].formatted_address не является реактивными данными, такими как переменная сеанса.

и в то время, когда помощники возвращают 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, потому что в данный момент вы вернуть значение в шаблон значение ''

На сессии переменная работает, так как сессия является реактивными данными, и Кроме того, помощник запускает assyncronus, поэтому сначала вспомогательный поиск Session.get('location') имеет значение '', но несколько секунд leater, когда обратный вызов на геолокации заканчивается, значение сеанса различно, а вычисление помощника повторяет функцию и возвращает ее Значение.

+0

Итак, лучший выбор - использовать 'Session' для этого? – Shtirlits