我试图理解javascript,以及传递变量的方式,但我做得不太好。我试图用ajax刷新谷歌地图的标记,但一切都没有发生。
我提交了一个表单,它将一些变量发送给控制器。处理了一些东西,它用.js响应......
find.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
放入.addMarkers()
,但处理程序没有构建标记。
答案 0 :(得分:2)
您需要一个全球可访问的商店。
我建议如下:
Gmaps.store = {}
jQuery ->
Gmaps.store.handler = Gmaps.build 'Google'
Gmaps.store.handler.buildMap...
Gmaps.store.markers = Gmaps.store.handler.addMarkers(...)
您也可以访问js.erb中的变量。