我正在尝试理解 javascript,以及变量传递的方式,但我做得不太好。我正在尝试使用 ajax 刷新谷歌地图的标记,但没有任何反应。
我提交了一个表单,它将一些变量发送到控制器。有些东西被处理了,它用.js响应......
查找.js.erb
$('#collapseTwo ul').html("<%= j render partial: 'events/sidebar', collection: @events %>");
alert(<%= raw @hash.to_json %>);
clearMarkers();
markers = handler.addMarkers(<%= raw @hash.to_json %>, {
draggable: false
});
渲染很好,所以一切都在那里工作,但我似乎无法抓住标记来刷新地图。该警报显示[object Object]
,因此这可能是正确的,但对标记没有任何操作。
marker.coffee
我对以下形式进行了一些修改
clear: ->
@getServiceObject().setMap(null)
show: ->
@getServiceObject().setVisible(true)
hide: ->
@getServiceObject().setVisible(false)
这样就clearMarkers();
可以了。它在另一个文件中,我在其中存储了一些其他操作
events.js.coffee
jQuery ->
...
...
@clearMarkers = ->
for marker in Gmaps.store.markers
marker.clear()
Gmaps.store.markers = []
所以...我最初用...调用地图
jQuery ->
handler = Gmaps.build 'Google'
handler.buildMap {
provider: {
minZoom: 3
}, internal: {id: 'map'} }, ->
markers = handler.addMarkers( $('#map').data('events'),
draggable: false
flat: false
)
#moves map to marker clicked + open infowindow
$(document).on 'click', '#sideBar li', ->
markers[$(this).data('marker')].panTo()
markers[$(this).data('marker')].click()
底部的那个函数......我访问markers
数组的唯一方法是因为它在handler.buildMap
函数内部。那么,markers
变量应该是全局的吗?我还能如何对他们采取行动?
此外,handler
变量......在我看来,它应该随处可用。我尝试手动放入@hash
into .addMarkers()
,但处理程序没有构建标记。