2010-09-30 20 views
6

Creo que se trata de un problema de alcance. Como el evento se desencadena después de que he agregado todos los oyentes, num_markers siempre ha sido anulado por el siguiente ciclo en el ciclo.Google maps: pasar información a un evento Escucha

¿Hay alguna forma en que pueda pasar variables a la función de evento?

Intenté este enfoque pero no lo hizo para mí. Google Maps: Event Listener only remembering final value of variable

  var map = new google.maps.Map(document.getElementById("map_canvas"), 
      myOptions); 
      var info_window = new google.maps.InfoWindow(); 
      var markers = []; 
function load_markers() { 
       var bounds_url = map.getBounds().toUrlValue(); 
       $.ajax({ 
        url:'/retailer-markers?bounds='+bounds_url, 
        dataType: 'json', 
        success: function(data) { 
         for(i = 0; i < data.length; i++) { 
          var marker_pos = new google.maps.LatLng(data[i]['lat'], data[i]['long']); 
          //Every time the listener event is called this number is the length of the array 
          var marker_num = get_markers_count(); 

          markers[marker_num] = new google.maps.Marker({ 
           position: marker_pos, 
           map: map, 
           title:data[i]['Title'], 
           icon: image 
          }); 

          google.maps.event.addListener(markers[marker_num], 'click', function() { 
           info_window.setContent('hello'); 
           var pos = markers[marker_num].getPosition(); 
           info_window.setPosition(pos); 
           info_window.open(map, markers[marker_num]); 
          }); 


         } 
        } 
       }); 
      } 

Respuesta

21

La solución fue usar this para los detalles marcadores. Cualquier otra variable que se pueden establecer en el marcador con marker.set('some_var', data);

$.ajax({ 
         url:'/retailer-markers?bounds='+bounds_url, 
         dataType: 'json', 
         success: function(data) { 
          for(i = 0; i < data.length; i++) { 
           var info_window = get_info_window(); 

           var marker_pos = new google.maps.LatLng(data[i]['lat'], data[i]['long']); 

           marker_num = get_markers_count(); 

           marker = new google.maps.Marker({ 
            position: marker_pos, 
            map: map, 
            title:data[i]['Title'], 
            icon: image 
           }); 

           markers.push(marker); 
           marker.set('retailer', data[i]); 

           google.maps.event.addListener(marker, 'click', function() { 
            var retailer = this.get('retailer'); 

            info_window.setContent(retailer['name']); 
            info_window.open(map, this); 
           }); 


          } 
         } 
        }); 
+4

Ese '' .get' y .set' fue de gran ayuda para un proyecto mío, saludos! – Kokos

+0

El método '.set' funciona porque la clase' google.maps.Marker' amplía ['google.maps.MVCObject'] (https://developers.google.com/maps/documentation/javascript/reference#MVCObject) – ruhong

Cuestiones relacionadas