Javascript OpenLayers+;轨道3和x2B;CoffeeScript=a.draw不是一个函数
我不明白为什么这对Coffeescript不起作用。我试图简化这个例子: 在视图中,我有一个ID为map的div,并调用initMap() 我得到的错误是:Javascript OpenLayers+;轨道3和x2B;CoffeeScript=a.draw不是一个函数,javascript,ruby-on-rails,coffeescript,openlayers,Javascript,Ruby On Rails,Coffeescript,Openlayers,我不明白为什么这对Coffeescript不起作用。我试图简化这个例子: 在视图中,我有一个ID为map的div,并调用initMap() 我得到的错误是: TypeError: a.draw is not a function 在openlayers库的中间 我在.js.coffeescript文件中获得了以下代码: @MarkOnce = OpenLayers.Class OpenLayers.Control, defaultHandlerOptions: 'single': tru
TypeError: a.draw is not a function
在openlayers库的中间
我在.js.coffeescript文件中获得了以下代码:
@MarkOnce = OpenLayers.Class OpenLayers.Control,
defaultHandlerOptions:
'single': true
'double': false
'pixelTolerance': 0
'stopSingle': false
'stopDouble': false
initialize: ->
this.handlerOptions = OpenLayers.Util.extend({}, this.defaultHandlerOptions)
OpenLayers.Control.prototype.initialize.apply(this, arguments)
this.handler = new OpenLayers.Handler.Click(this, {'click': this.mark}, this.handlerOptions)
mark: (evt) ->
console.log 'mark'
alert('pan')
default_marker = (lonlat) ->
size = new OpenLayers.Size(21,25)
offset = new OpenLayers.Pixel(-(size.w/2), -size.h)
icon = new OpenLayers.Icon('http://www.openlayers.org/dev/img/marker.png',size,offset)
marker = new OpenLayers.Marker(lonlat,icon)
return marker
@initMap = (lon,lat,marker) ->
@map = load_map(lon,lat)
render_marker(@map,lon,lat) if marker
set_projection(@map,lon,lat)
set_callbacks(@map)
load_map = (lon,lat) ->
map = new OpenLayers.Map 'map'
layer = new OpenLayers.Layer.OSM()
map.addLayer(layer)
map
set_projection = (map, lon, lat) ->
projection = new OpenLayers.Projection("EPSG:4326")
point = new OpenLayers.LonLat(lon,lat)
console.log(point)
center = point.transform(projection, map.getProjectionObject())
map.setCenter(point, 5)
render_marker = (map,lon,lat) ->
layer_once = new OpenLayers.Layer.Markers("mark_once")
map.addLayer(layer_once)
lonlat = new OpenLayers.LonLat(lon,lat)
layer_once.addMarker(@default_marker(lonlat))
@numMarkers++
set_callbacks = (map) ->
click = new MarkOnce()
map.addControl(click)
click.activate()
编辑:如果您更改{draw:->alert'pan}的this.defaultHandlerOptions,它似乎可以工作。现在的问题是:在这个范围内发生了什么?“这”是什么
EDIT2:此中止的一个可能问题是,每当我缩小或缩小地图时,标记都会放置在地图的中心。如何避免这种情况发生
EDIT3:如果你说到这一点,不管你在做什么,都要把它炸掉,然后去使用传单。我在CoffeeScript从OpenLayers.Control和OpenLayers.Handle.click创建一个点击处理程序时遇到了同样的问题,就像你尝试过的那样使用OpenLayers.Class-但似乎不需要这样做 看
了解如何非常轻松地在映射构造函数的options参数中建立eventlistener。这对我来说很好。嗨,谢谢你的评论,但那是很久以前的事了,我现在无法测试这是否解决了问题。如上所述,我最终选择了传单。但既然你是在重复这一点,你应该是对的,所以我将你的答案设置为被接受。欢迎来到SO。