2010-09-30 11 views
6

मुझे लगता है कि यह एक दायरा समस्या है। चूंकि ईवेंट को ट्रिगर करने के बाद ट्रिगर किया गया है क्योंकि सभी श्रोताओं num_markers को लूप में अगले चक्र द्वारा हमेशा ओवरराइड किया गया है।Google मानचित्र - किसी ईवेंट में जानकारी पास करें श्रोता

क्या कोई तरीका है कि मैं ईवेंट फ़ंक्शन में चर पास कर सकता हूं?

मैंने इस दृष्टिकोण की कोशिश की लेकिन यह मेरे लिए नहीं था। 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]); 
          }); 


         } 
        } 
       }); 
      } 

उत्तर

21

समाधान मार्कर जानकारी के लिए this उपयोग करने के लिए किया गया था। किसी भी अन्य चर 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

कि साथ मार्कर पर सेट किया जा सकता '.get' और' .set' मेरा, चियर्स की एक परियोजना के लिए बहुत मदद की थी! – Kokos

+0

'.set' विधि काम करती है क्योंकि 'google.maps.Marker' वर्ग [' google.maps.MVCObject'] बढ़ाता है (https://developers.google.com/maps/documentation/javascript/reference#MVCObject) – ruhong

संबंधित मुद्दे