2010-09-30 36 views
6

Tôi nghĩ đây là vấn đề phạm vi. Kể từ khi sự kiện được kích hoạt sau khi tôi đã thêm tất cả các người nghe num_markers đã luôn luôn bị ghi đè bởi chu kỳ tiếp theo trong vòng lặp.Google maps - chuyển thông tin vào một Event Listener

Có cách nào tôi có thể chuyển biến cho hàm sự kiện không?

Tôi đã thử phương pháp này nhưng không phải cho tôi. 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]); 
          }); 


         } 
        } 
       }); 
      } 

Trả lời

21

Giải pháp là sử dụng this để biết chi tiết điểm đánh dấu. Bất kỳ biến nào khác có thể được đặt lên điểm đánh dấu bằng 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

Đó là '.get' và' .set' là sự trợ giúp tuyệt vời cho một dự án của tôi, chúc mừng! – Kokos

+0

Phương thức '.set' hoạt động vì lớp' google.maps.Marker' mở rộng ['google.maps.MVCObject'] (https://developers.google.com/maps/documentation/javascript/reference#MVCObject) – ruhong

Các vấn đề liên quan