gpt4 book ai didi

javascript - OpenLayers + Rails 3 + CoffeeScript = a.draw 不是函数

转载 作者:行者123 更新时间:2023-12-02 19:02:49 25 4
gpt4 key购买 nike

我不明白为什么这不适用于 Coffeescript。我试图简化这个例子:http://openlayers.org/dev/examples/click-handler.html

在 View 中,我有一个带有 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:这种中止的一个可能的问题是,每当我缩小或缩小 map 时,标记都会放置在 map 的中心。如何避免这种情况发生?

EDIT3:如果你到了这一步,就毁掉你正在做的一切,然后去使用传单。

最佳答案

我在使用 CoffeeScript 从 OpenLayers.Control 和 OpenLayers.Handle.Click 使用 OpenLayers.Class 创建点击处理程序时遇到了同样的问题,就像您尝试过的那样 - 但似乎不需要。

参见Do I have a OpenLayers / jQuery conflict here?了解如何轻松地在 map 构造函数的选项参数中建立事件监听器。这对我来说效果很好。

关于javascript - OpenLayers + Rails 3 + CoffeeScript = a.draw 不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14633728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com