CoffeeScript和MapBox:PopUps显示但不打开

时间:2014-11-10 16:14:53

标签: javascript ruby-on-rails coffeescript mapbox

我有一个Rails应用程序,显示带有弹出窗口的MapBox地图,但弹出窗口没有按照我的预期打开。 我的CoffeeScript代码是:

$ -> map = L.mapbox.map('map', 'mapcode').setView([40, -100], 5)

$.ajax
dataType: 'text'
url: '/places.json'
 success: (data) ->
 geojson = $.parseJSON(data)
 map.featureLayer.setGeoJSON(geojson)

# add custom popups to each marker
$ -> map.featureLayer.on 'layeradd', (e) $ ->
  marker = e.layer
  properties = marker.feature.properties

  # create custom popup
  popupContent =  '<div>' +
                    '<h3>' + properties.name + '</h3>' +
                    '<p>' + properties.city + '</p>' +
                  '</div>'

  # http://leafletjs.com/reference.html#popup
$ ->  marker.bindPopup popupContent,
    closeButton: true
    minWidth: 80
  maxWidth: 250

任何想法都表示赞赏!

1 个答案:

答案 0 :(得分:0)

$ ->是为Jquery的ready()函数注册回调的简写。在您的代码中,您可以相互独立地注册三个回调。您在这些回调中声明的每个变量都只会在那里生存。因此,当您调用marker.bindPopup()时,您不应该访问在不同闭包中声明的marker变量。 确保在所有回调/闭包中都可以访问marker。如何在bindPopup处理程序中注册layerAdd回调?确保缩进设置正确。

另外,为什么不只召唤一次$ ->

$ -> 
  map = L.mapbox.map('map', 'mapcode').setView([40, -100], 5)

  $.ajax
    dataType: 'text'
    url: '/places.json'
    success: (data) ->
      geojson = $.parseJSON(data)
      map.featureLayer.setGeoJSON(geojson)

   # add custom popups to each marker
   map.featureLayer.on 'layeradd', (e) $ ->
     marker = e.layer
     properties = marker.feature.properties

     # create custom popup
     popupContent =  '<div>' +
                '<h3>' + properties.name + '</h3>' +
                '<p>' + properties.city + '</p>' +
              '</div>'

     # http://leafletjs.com/reference.html#popup
     marker.bindPopup popupContent,
       closeButton: true
       minWidth: 80
       maxWidth: 250