Почему данные геолокации не возвращаются из хелпера в шаблон

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


person eawer    schedule 16.04.2015    source источник


Ответы (1)


Это потому, что 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

И вы получите первый console.log, потому что на данный момент вы возвращаете значение в шаблон, значение равно ''

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

person carloss medranoo    schedule 16.04.2015
comment
Итак, лучший выбор — использовать для этого Session? - person eawer; 17.04.2015