谷歌地图的标记变量范围(gmaps4rails gem)

我试图理解javascript,以及传递变量的方式,但我做得不太好。 我正在尝试用ajax刷新谷歌地图的标记,但什么也没发生。

我提交了一个表单,它将一些变量发送给控制器。 处理了一些东西,它用.js响应……

find.js.erb

$('#collapseTwo ul').html(""); alert(); clearMarkers(); markers = handler.addMarkers(, { draggable: false }); 

渲染点火很好,所以一切都在那里工作,但我似乎无法抓住标记来刷新地图。 该警报显示[object Object] ,因此可能是正确的,但对标记没有任何操作。

我以marker.coffee的forms对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() ,但处理程序没有构建标记。

您需要一个全球可访问的商店。

我建议如下:

 Gmaps.store = {} jQuery -> Gmaps.store.handler = Gmaps.build 'Google' Gmaps.store.handler.buildMap... Gmaps.store.markers = Gmaps.store.handler.addMarkers(...) 

您也可以访问js.erb中的变量。