在将Uncaught ReferenceError
转换为map
之后,我将.js
的{{1}}转换为.js.coffee
,而不会更改流程或代码中的任何内容。
我的脚本在使用.js
时运行正常,.js.coffee
中没有。
我正在使用GMAP API以及时髦的infowindows,rails 5,ruby 2.4。
你知道为什么吗?
修改
为了清楚起见,我没有把mapOptions
变量放在那里,它只是我存储GMAP Snazzy主题的文件中定义的变量。
markersData = '<%= raw @places_markers.to_json %>'
markers = []
icon =
path: 'M4.415,8.829c2.432,0,4.415-1.983,4.415-4.415 C8.829,1.983,6.846,0,4.415,0S0,1.983,0,4.415C0,6.846,1.983,8.829,4.415,8.829z'
fillColor: '#2962FF'
fillOpacity: 1
anchor: new (google.maps.Point)(0, 0)
strokeWeight: 1
scale: 2
initializeMap = ->
map = new (google.maps.Map)(document.getElementById('places-map'), mapOptions)
google.maps.event.addListener map, 'click', ->
infoWindow.close()
displayMarkers(markersData)
createMarker = (latlng, markerInfowindow, icon) ->
marker = new (google.maps.Marker)(
map: map
position: latlng
icon: icon
draggable: true)
markers.push(marker)
google.maps.event.addListener marker, 'click', ->
iwContent = markerInfowindow
infoWindow = new SnazzyInfoWindow(
marker: marker
content: iwContent
placement: 'top'
maxWidth: 400
maxHeight: 200
)
infoWindow.open(map, marker)
displayMarkers = (markersData) ->
bounds = new (google.maps.LatLngBounds)
places_coordinates = []
i = 0
while i < markersData.length
latlng = new (google.maps.LatLng)(markersData[i].place_lat, markersData[i].place_lng)
markerInfowindow = markersData[i].infowindow
places_coordinates.push(latlng)
createMarker(latlng, markerInfowindow, icon)
bounds.extend(latlng)
i++
markerCluster = new MarkerClusterer(map, markers)
map.fitBounds(bounds)
newLocation = (newLat, newLng) ->
map.setCenter
lat: newLat
lng: newLng
map.setZoom 15
initializeMap()
答案 0 :(得分:1)
map
是initializeMap
中的局部变量:
initializeMap = ->
map = new (google.maps.Map)(document.getElementById('places-map'), mapOptions)
...
所以除非你强迫它是全球性的,否则它在其他任何地方都不可见。除非您明确说明,否则CoffeeScript中的所有变量都是本地的。
您可以创建一个类并使map
成为实例变量:
class YourMap
constructor:
@map = new google.maps.Map(...)
# The rest of your code converted to methods goes here
或者,由于CoffeeScript wraps your code in a self executing function要维护其范围规则,您可以在函数外声明map
:
map = undefined
markersData = '<%= raw @places_markers.to_json %>'
markers = []
#...
然后将其他一切都留下。
在CoffeeScript中使用类可能会被认为更惯用。