これがCoffeescriptで機能しない理由がわかりません。この例を単純化しようとしました: http://openlayers.org/dev/examples/click-handler.html
ビューには、ID マップを含む div があり、initMap() を呼び出します。
私が得たエラーは次のとおりです。
TypeError: a.draw is not a function
openlayers lib の途中
.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: このアボードジで考えられる問題の 1 つは、マップをズームアウトまたはズームインすると、マーカーがマップの中央に配置されることです。これを回避するにはどうすればよいですか?
EDIT3: この時点まで来たら、何をしていても爆破して、リーフレットを使用してください。