Google地图addListener仅加载一个标记关闭问题

时间:2017-03-28 03:15:14

标签: javascript google-maps closures

我在移动视口时尝试加载谷歌地图标记,但只加载我最后添加的标记。我认为这是一个封闭问题。这是我的代码的一部分:

public override Font Font{  
   get  
   {  
       return this.Font;  ←This calls itself
   }

1 个答案:

答案 0 :(得分:0)

您可以在循环

中使用此命令
google.maps.event.addListener(map, "idle", function() {loadMarker(map, marker)});

在循环的每次迭代中,您尝试添加到事件'空闲'一个匿名函数。在每个事务中,您都可以使用新数据重写此函数。作为上次交易的结果,您最后添加的标记正在加载。您应该创建一个标记数组,并在循环结束后传递它们。像这样:

   downloadUrl('/data', function(results) {
      var resultsJSON = JSON.parse(results.responseText).data;
      var markers = [];
      for (var i = 0; i < resultsJSON.length; i++) {
      var lat = resultsJSON[i].lat;
      var lng = resultsJSON[i].lng;
      var latLng = new google.maps.LatLng(lat, lng);
      var marker = new google.maps.Marker({
        position: latLng,
        map: map,
        category:year,
        icon: icon.style,
        scale: 2
      });
       markers[i] = marker;
     }
     loadMarker(map, markers);
     google.maps.event.addListener(map, "idle", function() {loadMarker(map, markers)});
    });

 function loadMarker(map, markers) {
       for (var i = 0; i < markers.length; i++) {
        if(map.getBounds().contains(markers[i].getPosition())) {
        markers[i].setMap(map);
        console.log("Hello world");
      }
      else {
        markers[i].setMap(null);
      } 
     }
  }