Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 更改缩放会使所有隐藏标记重新出现在Google地图(Gmaps4rails)上_Javascript_Jquery_Ruby On Rails_Google Maps_Gmaps4rails - Fatal编程技术网

Javascript 更改缩放会使所有隐藏标记重新出现在Google地图(Gmaps4rails)上

Javascript 更改缩放会使所有隐藏标记重新出现在Google地图(Gmaps4rails)上,javascript,jquery,ruby-on-rails,google-maps,gmaps4rails,Javascript,Jquery,Ruby On Rails,Google Maps,Gmaps4rails,我正在使用Gmaps4rails gem围绕一个中心位置构建地图。我使用复选框允许用户显示/隐藏附近的地点标记、餐厅、学校等。问题是,如果我显示一个类别,然后再次隐藏它,然后放大或缩小,这些标记将重新显示,即使它们以前被隐藏过 我的问题和这个问题很相似,虽然我一直没能解决它。我不知道是否有人能告诉我哪里出了问题。我的咖啡脚本如下 google_map1_handler = null google_map1_markers = [] $ -> $('#map-tab').click

我正在使用Gmaps4rails gem围绕一个中心位置构建地图。我使用复选框允许用户显示/隐藏附近的地点标记、餐厅、学校等。问题是,如果我显示一个类别,然后再次隐藏它,然后放大或缩小,这些标记将重新显示,即使它们以前被隐藏过

我的问题和这个问题很相似,虽然我一直没能解决它。我不知道是否有人能告诉我哪里出了问题。我的咖啡脚本如下

google_map1_handler = null
google_map1_markers = []

$ ->

  $('#map-tab').click (e) ->
    unless google_map1_handler?
      markers_data = $('#map1').data('markers')
      markers = []
      handler = Gmaps.build('Google', { markers: { maxRandomDistance: null } })

      handler.buildMap { provider: { zoom: 15 }, internal: {id: 'map1'} }, ->
        $.each markers_data, (i, marker) ->
          if marker.type == 'Property'
            markers.push handler.addMarker( marker )
            handler.map.centerOn({ lat: marker['lat'], lng: marker['lng'] })

        $('.map-checkbox').prop('checked', false)

      google_map1_handler = handler
      google_map1_markers = markers


  # Hide and show map markers with key checkboxes
  $('.map-checkbox').click (e) ->
    keywords = []
    $('.map-checkbox').each (i, el) ->
      keywords.push el.id if el.checked == true

    toggleMapMarkers(keywords)


  toggleMapMarkers = (keywords) ->
    markers_data = $('#map1').data('markers')
    handler = google_map1_handler
    markers = google_map1_markers

    # clear old markers
    _.each markers, (marker, i) ->
      marker.setMap(null)
    markers.length = 0

    _.each markers_data, (marker, i) ->
      if marker.type == 'Property' or marker.type in keywords
        markers.push handler.addMarker(marker)

    google_map1_markers = markers

基本上,当您使用clusterer时,它存储所有标记

  • 缩小时,它会将其贴图设置为
    null
    ,并添加群集图片

  • 放大时,它会删除簇pic并在标记中再次设置贴图

因此,当您执行
marker.setMap(null)
时,这还不够:您还必须从集群中删除标记

_.each markers, (marker, i) ->
  marker.setMap(null)
  handler.clusterer.removeMarker(marker)
但我也需要这个场景,所以只要做:

_.each markers, (marker, i) ->
  handler.removeMarker(marker)
甚至:

handler.removeMarkers(markers)

第二个项目很可能是“放大”。感谢您的快速响应!不幸的是,我现在得到了:uncaughttypeerror:Object#没有“removeMarker”方法,它有:升级到2.1.1是的,这就是问题所在!我从2.0.3升级到了最新的2.1.1版本,现在一切正常。谢谢你的帮助@apheading!