2014-01-14 4 views
0

У меня есть следующий код в моем JS файлПочему переменная карты google недоступна?

$(document).ready -> 
    mapOptions = null 
    map = null 
    set_user_location = (position) -> 
    mapOptions = 
     center: new google.maps.LatLng(position.coords.latitude, position.coords.longitude) 
     zoom: 14 
    console.log mapOptions 
    map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions) 

Значение MapOptions переменной равно нулю, когда я смотрю его в консоли. Я пропустил что-то очевидное здесь? Пожалуйста помоги.

+0

Что такое позиция? –

+0

если navigator.geolocation navigator.geolocation.getCurrentPosition (set_user_location, ошибка) –

+0

положение переменная передается браузером для set_user_location метод –

ответ

1

Если вы хотите map быть глобальным, то вы должны вручную прикрепить его к window (при условии, что вы в браузере):

window.map = null 
$(document).ready -> 
    # use `window.map` in here... 

или как это:

@map = null 
$(document).ready -> 
    #... 

You 'нужно быть очень осторожным, как вы ссылаетесь на map, хотя CoffeeScript подумает, что вы хотите локальную переменную; например, это не будет делать то, что вы могли бы подумать:

@map = null 
$(document).ready -> 
    map = something 

Это сделает местную map переменную внутри функции обратного вызова, так глобальной map не будут затронуты.

Если вы хотите, глобальное, то я бы рекомендовал создать глобальную специфичную для приложения имен:

# Somewhere before anything else happens... 
@your_app_name = { } 

, а затем сделать что-нибудь глобальное быть свойством в пространстве имен:

$(document).ready -> 
    your_app_name.map = null 
    #... 

сейчас вы всегда должны включать полное пространство имен (что помогает избежать конфликтов имен), и вам не придется слишком беспокоиться о том, что CoffeeScript запутывается, когда вам нужна локальная переменная в сравнении с глобальной.

+0

Спасибо за подробное объяснение. –

Смежные вопросы