为什么谷歌地图变量无法访问?

时间:2014-01-14 06:49:14

标签: google-maps coffeescript scope

我的js文件中有以下代码

$(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变量的值为null。 我错过了一些明显的东西吗?请帮忙。

1 个答案:

答案 0 :(得分:1)

如果您希望map是全局的,那么您必须手动将其附加到window(假设您在浏览器中):

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

或者像这样:

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

你必须非常小心你如何引用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会在你想要局部变量和全局变量时感到困惑。