2011-03-06 5 views
1

내 last.fm/google 이벤트 매핑 매시업의 일부로 last.fm API에서 동적으로 마커를 Google지도에 플롯해야합니다.Google Map Infowindow Closure?

이것은 모두 좋지만 마커를 클릭하면 마지막 정보창 (한 개의 공연) 만 표시됩니다. 나는 이것에 대한 추론을 알고 있지만 그것을 구현하려는 투쟁을 알고있다.

현재 모든 역동적 인 공연의 위치 (좌표)를 통해 PHP 루프를 실행하고 자바 스크립트로 전달합니다. 이것은 나에게 많은 의미가 있습니다 - 그리고 PHP의 내 지식은 JS보다 훨씬 더이 유일한 중 하나입니다하지 않는 한

<?php 

      foreach ($gigs->events->event as $js_event) { 

      $lat = $js_event->venue->location->children("geo",true)->point->children("geo",true)->lat; 
      $long = $js_event->venue->location->children("geo",true)->point->children("geo",true)->long; 
      $coords = "$lat,$long"; 

      ?>  

      var image = new google.maps.MarkerImage('http://chart.apis.google.com/chart?chst=d_map_pin_letter&chld=G|00CC99|000000', 
      new google.maps.Size(40, 32), 
      // The origin for this image is 0,0. 
      new google.maps.Point(0,0), 
      // The anchor for this image is the base of the flagpole at 0,32. 
      new google.maps.Point(0, 32)); 

        var marker = new google.maps.Marker({ 

         position: new google.maps.LatLng(<?php echo $coords ?>), 
         map: map, 
         icon:image, 
         title: '<?php echo str_replace('\'','',$js_event->title) ." at ". str_replace('\'','',$js_event->venue->name) ?>' 

        }); 

        var contentString = '<?php echo str_replace('\'','',$js_event->title) ." at ". str_replace('\'','',$js_event->venue->name)?>' 

        var infowindow = new google.maps.InfoWindow({ 
         content: contentString 
        }); 

        google.maps.event.addListener(marker, 'click', function() { 
         infowindow.open(map,marker); 
        }); 

       <? } ?> 

이 어떻게 완전히 등 JS가 아니라 PHP,로 루프를 리팩토링하지 않고 폐쇄를 추가 할 수 있습니다 솔루션?

많은 분들께 감사드립니다.

답변

1

당신의 marker 변수의 범위를 분리하는 쉬운 방법은 익명 함수의 호출을 래핑하는 것입니다 :

var map = ... 

(function() { 
    var image = ... 
    var marker = ... 
    ... 
    google.maps.event.addListener(marker, 'click', function() { 
     infowindow.open(map, marker); 
    }); 
})(); 

바와 같이, 익명 함수가 선언 된 범위에서 아무것도 볼 수 here을 설명했다. 따라서 함수 내부에서 map을 볼 수 있습니다.이 범위는 선언되었을 때 범위에있었습니다. 그러나 함수 밖에서는 이 보이지 않으므로 익명 함수의 반복 된 클론은 서로 충돌하지 않습니다.

+0

고맙습니다. – cee

+0

환상적이며 작동합니다! 많은 감사 – cee