Google-Maps-for-Rails에서 정보 창을 여는 이벤트 발생
15430 단어 루비RailsGoogleMapsAPI
소개
Google-Maps-for-Rails 은 Rails에서 Google Map을 표시하기 위한 gem입니다. 이 기사에서는 Google Map 마커에 연결된 정보 창을 여는 이벤트를 발생시키는 방법을 소개합니다.
환경
1. 정보 창 만들기
map_controller.rbclass MapController < ApplicationController
def index
@places =Place.all
@hash = Gmaps4rails.build_markers(@places) do |place, marker|
marker.lat place.latitude
marker.lng place.longitude
marker.infowindow render_to_string( partial: "map/infowindow",
locals: { place: place} )
marker.json({ id: place.id, })
end
end
end
_infowindow.html.erb<div>
<%= link_to "#{place.name}", place %>
</div>
위와 같이 정보 창을 만듭니다. 이벤트 발생 시 마커를 지정할 수 있도록 place의 id를 마커에 추가해 둡니다.
2. 마커의 serviceObject에 정보 창 설정
마커의 serviceObject에 place id와 infowindow를 설정합니다.
Gmaps.store = {}
Gmaps.store.markers = markers.map(function(m) {
marker = handler.addMarker(m);
marker.serviceObject.set('id', m.id);
marker.serviceObject.set('infowindow', m.infowindow);
return marker;
});
3. 정보 창의 리스너 추가
정보 창의 리스너를 추가합니다. 이벤트 발생 시에는 지정된 id의 마커에 대한 정보 창을 열어야 합니다.
google.maps.event.addListener(handler.getMap(), "open", function(id) {
$.each(Gmaps.store.markers, function() {
if (this.serviceObject.id == id) {
infowindow = new google.maps.InfoWindow({
content: this.serviceObject.infowindow
});
infowindow.open(this.serviceObject.map, this.serviceObject);
}
});
});
index.html.erb의 전체는 다음과 같습니다.
map/index.html.erb<div class="map_container">
<div id="map" class="map_canvas"></div>
</div>
<script type="text/javascript">
handler = Gmaps.build('Google');
handler.buildMap({ provider: {}, internal: {id: 'map'}}, function(){
markers = <%= raw @hash.to_json %>
Gmaps.store = {}
Gmaps.store.markers = markers.map(function(m) {
marker = handler.addMarker(m);
marker.serviceObject.set('id', m.id);
marker.serviceObject.set('infowindow', m.infowindow);
return marker;
});
handler.bounds.extendWith(Gmaps.store.markers);
handler.fitMapToBounds();
handler.getMap().setCenter(new google.maps.LatLng(35.720969, 139.735877));
handler.getMap().setZoom(12);
google.maps.event.addListener(handler.getMap(), "open", function(id) {
$.each(Gmaps.store.markers, function() {
if (this.serviceObject.id == id) {
infowindow = new google.maps.InfoWindow({
content: this.serviceObject.infowindow
});
infowindow.open(this.serviceObject.map, this.serviceObject);
}
});
});
});
</script>
4. 이벤트 발생
그리고는, 아래와 같이 이벤트를 발생시키는 것으로, 지정한 정보 윈도우를 열 수가 있습니다.
google.maps.event.trigger(handler.getMap(), "open", id);
문제점
이벤트가 발생하면 마커를 클릭하면 이중으로 정보 창이 열립니다.
해결책
아래 코드를 추가하면 클릭 이벤트에서 열린 정보 창을 닫을 수 있습니다.
if (handler.currentInfowindow()) {
handler.currentInfowindow().close();
}
요약
Google-Maps-for-Rails를 사용하여 Google Map 마커에 연결된 정보 창을 여는 이벤트를 발생시키는 방법을 소개했습니다. 이 방법을 사용하면 마커의 클릭 이벤트 외에도 원하는 시간에 지정한 마커의 정보 창을 열 수 있습니다.
Reference
이 문제에 관하여(Google-Maps-for-Rails에서 정보 창을 여는 이벤트 발생), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yoshi_01/items/aa48182dc9e69aecf5bf
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
class MapController < ApplicationController
def index
@places =Place.all
@hash = Gmaps4rails.build_markers(@places) do |place, marker|
marker.lat place.latitude
marker.lng place.longitude
marker.infowindow render_to_string( partial: "map/infowindow",
locals: { place: place} )
marker.json({ id: place.id, })
end
end
end
<div>
<%= link_to "#{place.name}", place %>
</div>
마커의 serviceObject에 place id와 infowindow를 설정합니다.
Gmaps.store = {}
Gmaps.store.markers = markers.map(function(m) {
marker = handler.addMarker(m);
marker.serviceObject.set('id', m.id);
marker.serviceObject.set('infowindow', m.infowindow);
return marker;
});
3. 정보 창의 리스너 추가
정보 창의 리스너를 추가합니다. 이벤트 발생 시에는 지정된 id의 마커에 대한 정보 창을 열어야 합니다.
google.maps.event.addListener(handler.getMap(), "open", function(id) {
$.each(Gmaps.store.markers, function() {
if (this.serviceObject.id == id) {
infowindow = new google.maps.InfoWindow({
content: this.serviceObject.infowindow
});
infowindow.open(this.serviceObject.map, this.serviceObject);
}
});
});
index.html.erb의 전체는 다음과 같습니다.
map/index.html.erb<div class="map_container">
<div id="map" class="map_canvas"></div>
</div>
<script type="text/javascript">
handler = Gmaps.build('Google');
handler.buildMap({ provider: {}, internal: {id: 'map'}}, function(){
markers = <%= raw @hash.to_json %>
Gmaps.store = {}
Gmaps.store.markers = markers.map(function(m) {
marker = handler.addMarker(m);
marker.serviceObject.set('id', m.id);
marker.serviceObject.set('infowindow', m.infowindow);
return marker;
});
handler.bounds.extendWith(Gmaps.store.markers);
handler.fitMapToBounds();
handler.getMap().setCenter(new google.maps.LatLng(35.720969, 139.735877));
handler.getMap().setZoom(12);
google.maps.event.addListener(handler.getMap(), "open", function(id) {
$.each(Gmaps.store.markers, function() {
if (this.serviceObject.id == id) {
infowindow = new google.maps.InfoWindow({
content: this.serviceObject.infowindow
});
infowindow.open(this.serviceObject.map, this.serviceObject);
}
});
});
});
</script>
4. 이벤트 발생
그리고는, 아래와 같이 이벤트를 발생시키는 것으로, 지정한 정보 윈도우를 열 수가 있습니다.
google.maps.event.trigger(handler.getMap(), "open", id);
문제점
이벤트가 발생하면 마커를 클릭하면 이중으로 정보 창이 열립니다.
해결책
아래 코드를 추가하면 클릭 이벤트에서 열린 정보 창을 닫을 수 있습니다.
if (handler.currentInfowindow()) {
handler.currentInfowindow().close();
}
요약
Google-Maps-for-Rails를 사용하여 Google Map 마커에 연결된 정보 창을 여는 이벤트를 발생시키는 방법을 소개했습니다. 이 방법을 사용하면 마커의 클릭 이벤트 외에도 원하는 시간에 지정한 마커의 정보 창을 열 수 있습니다.
Reference
이 문제에 관하여(Google-Maps-for-Rails에서 정보 창을 여는 이벤트 발생), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yoshi_01/items/aa48182dc9e69aecf5bf
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
google.maps.event.addListener(handler.getMap(), "open", function(id) {
$.each(Gmaps.store.markers, function() {
if (this.serviceObject.id == id) {
infowindow = new google.maps.InfoWindow({
content: this.serviceObject.infowindow
});
infowindow.open(this.serviceObject.map, this.serviceObject);
}
});
});
<div class="map_container">
<div id="map" class="map_canvas"></div>
</div>
<script type="text/javascript">
handler = Gmaps.build('Google');
handler.buildMap({ provider: {}, internal: {id: 'map'}}, function(){
markers = <%= raw @hash.to_json %>
Gmaps.store = {}
Gmaps.store.markers = markers.map(function(m) {
marker = handler.addMarker(m);
marker.serviceObject.set('id', m.id);
marker.serviceObject.set('infowindow', m.infowindow);
return marker;
});
handler.bounds.extendWith(Gmaps.store.markers);
handler.fitMapToBounds();
handler.getMap().setCenter(new google.maps.LatLng(35.720969, 139.735877));
handler.getMap().setZoom(12);
google.maps.event.addListener(handler.getMap(), "open", function(id) {
$.each(Gmaps.store.markers, function() {
if (this.serviceObject.id == id) {
infowindow = new google.maps.InfoWindow({
content: this.serviceObject.infowindow
});
infowindow.open(this.serviceObject.map, this.serviceObject);
}
});
});
});
</script>
그리고는, 아래와 같이 이벤트를 발생시키는 것으로, 지정한 정보 윈도우를 열 수가 있습니다.
google.maps.event.trigger(handler.getMap(), "open", id);
문제점
이벤트가 발생하면 마커를 클릭하면 이중으로 정보 창이 열립니다.
해결책
아래 코드를 추가하면 클릭 이벤트에서 열린 정보 창을 닫을 수 있습니다.
if (handler.currentInfowindow()) {
handler.currentInfowindow().close();
}
요약
Google-Maps-for-Rails를 사용하여 Google Map 마커에 연결된 정보 창을 여는 이벤트를 발생시키는 방법을 소개했습니다. 이 방법을 사용하면 마커의 클릭 이벤트 외에도 원하는 시간에 지정한 마커의 정보 창을 열 수 있습니다.
Reference
이 문제에 관하여(Google-Maps-for-Rails에서 정보 창을 여는 이벤트 발생), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yoshi_01/items/aa48182dc9e69aecf5bf
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Google-Maps-for-Rails에서 정보 창을 여는 이벤트 발생), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yoshi_01/items/aa48182dc9e69aecf5bf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)