Cześć,
Piszę aplikację w której używam google maps API. Na chwilę obecną moje widoki wyglądają dość paskudnie. Np. w form mam takie cudo:
<%= form_for @pet, html: { multipart: true } do |f| %>
<p></p><%= f.label :date %>: <%= f.date_select :date %></p>
<p><%= f.label :species %>: <%= f.text_field :species %></p>
<p><%= f.label :description %>: <%= f.text_field :description %></p>
<p><%= f.label :address %>: <%= f.text_field :address %></p>
<p><%= f.label :image%>: <%= f.file_field :image %></p>
<%= f.submit %>
<%= f.hidden_field :latitude, :id => "lat" %>
<%= f.hidden_field :longitude, :id => "lng" %>
<%= hidden_field_tag :state, params[:state] %>
<% end %>
<div style='width: 800px;'>
<div id="map" style='width: 800px; height: 400px;'></div>
</div>
<script>
var lat = $("#lat");
var lng = $("#lng");
var marker = null;
function initMap() {
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 6,
center: {lat: 52.2297, lng: 21.0122 }
});
placeMarker({lat: 52.2297, lng: 21.0122 }, map);
set_latlng_to_input(marker);
map.addListener('click', function(e) {
if (marker != null) {
marker.setMap(null)
};
placeMarker(e.latLng, map);
set_latlng_to_input(marker);
});
}
function placeMarker(latLng, map) {
marker = new google.maps.Marker({
position: latLng,
map: map
});
}
var set_latlng_to_input = function(marker){
lat.val(marker.getPosition().lat());
lng.val(marker.getPosition().lng());
}
</script>
<script async defer
src="https://maps.googleapis.com/maps/api/js?key=<%= Rails.application.secrets.google_maps_key %>
&callback=initMap"></script>
Na wygenerowanej mapie ustawiam sobie marker i następnie jego współrzędne są zapisywane w bazie.
Chcciałbym wywalić wszystko z <script>
do osobnego pliku map.js i wywołać go za pomocą <% javascript_include_tag ‘map’ %>. Nie wiem jak poradzić sobie z transferem zmiennych lng i lat do formularza znajdującego się w widoku.
W drugim przypadku chcę wyswietlić statyczną mape przekazując współrzędne z modelu. Znalazłem dość prosty sposób opisany tutaj:
http://railscasts.com/episodes/324-passing-data-to-javascript?autoplay=true
wykorzystujący gem https://github.com/gazay/gon.
Czy to dobry pomysł? Ten railscast jest sprzed 5 lat a to szmat czasu…
Jak wg. Was powinno to wyglądać?
Ciut długi post wyszedł ale może ktoś dotrwa do końca i podzieli się sugestiami
Z góry dzieki!