我有一个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
任何想法都表示赞赏!
答案 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