2012-07-29 3 views
0

shop 모델이 있습니다. 맵에서 가게의 마커를 클릭하면 javascript를 사용하여 shop 이름을 표시하는 간단한 경고 상자를 출력하고 싶습니다. 이 JSON을 다루는 첫 시간 그래서 나는 또한 json in javascript 일부 소개 JSON에 대한 기사를 읽었습니다됩니다gmaps4rails : 컨트롤러에서 json 값을 가져 오는 방법은 무엇입니까?

# controller 
@json = Shop.all.to_gmaps4rails do |shop, marker| 
    marker.json({ id: shop.id, name: shop.name }) 
end 

# view 
<%= gmaps("map_options" => { auto_zoom: false, zoom: 2, class: "homepage-map" }, 
     "markers" => { data: @json, 
        options: { do_clustering: true, 
           clusterer_maxZoom: 11, 
           raw: "{ animation: google.maps.Animation.DROP }" } 
        }) 
%> 

<% content_for :scripts do %> 
<script type="text/javascript" charset="utf-8"> 
Gmaps.map.callback = function() { 
    for (var i = 0; i < this.markers.length; ++i) { 
    google.maps.event.addListener(Gmaps.map.markers[i].serviceObject, 'click', function() { 
     alert(put something here); 
    }); 
    } 
}; 
</script> 
<% end %> 

:

이 내 코드입니다. 나는 이것이 gmaps4rails로 어떻게 이루어 졌는지 궁금해하고 있었다.

답변

1

이 트릭을 수행해야합니다

<script type="text/javascript" charset="utf-8"> 
function handleMarkerClickClosure(marker) { 
    return function() { 
    alert(marker.name); 
    } 
} 

Gmaps.map.callback = function() { 
    for (var i = 0; i < this.markers.length; ++i) { 
    google.maps.event.addListener(Gmaps.map.markers[i].serviceObject, 'click', handleMarkerClickClosure(Gmaps.map.markers[i])); 
    } 
}; 
</script> 
+0

감사 남자, 작동! 그러나 상점에 속한 모든 드레스를 보여주는 것과 같이 약간 복잡한 작업을 수행하는 경우 페이지로드 중 모든 상점에 대해 SQL SELECT 문을 실행하여 크기 조정이 불가능 해집니다. 사용자가 확대/축소를 마쳤 으면 특정 마커 만로드 할 수 있지만 전 세계를 확대/축소 수준 2로 표시하려면이 전략이 작동하지 않습니다. 이에 대한 일반적인 조언이 있습니까? –

+0

보통 마킹을 AJAX (페이지 매김 포함)로로드합니다. – apneadiving

+0

그것은 현재의 스킬 셋 이상입니다. 추측하는 사람을 고용 할 시간 ... –

관련 문제