2012-07-29 57 views
0

我有一個shop模型。我想輸出一個簡單的警報框,當我點擊地圖上的商店標記時,使用javascript顯示shop名稱。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 %> 

這是我第一次處理JSON,所以我讀過關於JSON一些介紹性的文章,也json in javascript。我想知道這是如何完成與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顯示整個世界,則此策略不起作用。您是否對此有任何一般性建議? – 2012-07-30 12:19:54

+0

我通常用ajax加載標記(帶分頁)。 – apneadiving 2012-07-30 13:28:19

+0

這超出了我目前的技能。我猜想僱用某人的時間... – 2012-08-02 21:46:27