0

我正在尝试理解 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变量......在我看来,它应该随处可用。我尝试手动放入@hashinto .addMarkers(),但处理程序没有构建标记。

4

1 回答 1

2

您需要一个可在全球范围内访问的商店。

我建议如下:

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

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

于 2013-11-04T20:08:03.123 回答