私は with を使用gmap4rails v2
してrails 4.1
おり、一度にすべてをロードするのではなく、非常に非効率的です。そのマーカーがクリックされたらinfoboxes
、特定の情報ボックスの内容のみをロードしたいと思います。marker
マーカーを選択するために次のことを思いつきました。
markers = handler.addMarkers(<%= raw(@hash.to_json) %>);
_.each(markers, function(marker){
google.maps.event.addListener(handler.getMap(), 'click', function(){
marker.infowindow();
});
});
しかし、ユーザー テーブルにクエリを送信して必要な属性を取得する方法がわかりUser.name
ませUser.photo
んinfobox
。
完全な gmaps ハンドラは次のとおりです。
var handler = Gmaps.build('Google', { markers: { maxRandomDistance: null, clusterer: undefined } }),
maxZoom = 14;
handler.buildMap({
provider: {
mapTypeControl: false,
mapTypeId: google.maps.MapTypeId.ROADMAP,
streetViewControl: false,
doClustering: false,
minZoom: 5
},
internal: {id: 'big_map'}},
function(){
markers = handler.addMarkers(<%= raw(@hash.to_json) %>);
_.each(markers, function(marker){
google.maps.event.addListener(handler.getMap(), 'click', function(){
marker.infowindow();
});
});
handler.map.centerOn([$("#big_map").data("lat"),$("#big_map").data("lng")]);
handler.getMap().setZoom(15);
//handler.bounds.extendWith(markers);
//handler.fitMapToBounds();
});
マーカー情報をロードするコントローラー:
return Gmaps4rails.build_markers(profiles) do |profile, marker|
marker.lat profile.latitude
marker.lng profile.longitude
marker.json({ :id => profile.profile_code })
# this is how I loaded all markers before: marker.infowindow render_to_string(partial: "info_window", locals: { profile: profile })
marker.picture({
url: view_context.image_path( "marker-#{ (profile == current_user.profile) ? 'green' : 'blue' }.png"),
width: 32,
height: 32
})
end
infowindow()
以下に示すように、元のマーカーのロードで行ったように、パーシャルを関数に送信する方法はありますか? もしそうなら、どのようにuser.id
パーシャルに送信しますか(私の場合、profile.profile_code
それぞれmarker.id
を等しく設定すると思います.
アップデート:
わかりました。サーバーにリクエストを送信する必要があることに気付きましたが、これは JavaScript では実行できません。使用して ajax を使用してみます
markers = handler.addMarkers(<%= raw(@hash.to_json) %>);
_.each(markers, function(marker){
google.maps.event.addListener(handler.getMap(), 'click', function(){
var infowindow = marker.infowindow;
$.post('<%= load_info_box_url %>', {
}, function(data){
infowindow.html(data).name %>)
infowindow.open(Gmaps.map.map, marker);
});
});
});
続いて load_info_box ルートを作成し、コントローラーで必要なデータを要求し、html を data に送り返します!