gmaps4rails - удалить маркер и обновить атрибут поля в форме - PullRequest
2 голосов
/ 24 февраля 2012

Я пытаюсь это реализовать, из вики о самоцвете https://github.com/apneadiving/Google-Maps-for-Rails/wiki/Javascript-goodies

<% content_for :scripts do %>
    <script type="text/javascript" charset="utf-8">
        var markersArray = [];
        // On click, clear markers, place a new one, update coordinates in the form
        Gmaps.map.callback = function() {
            google.maps.event.addListener(Gmaps.map.map, 'click', function(event) {
              clearOverlays();
              placeMarker(event.latLng);
              updateFormLocation(event.latLng);
            });
        };
        // Update form attributes with given coordinates
        function updateFormLocation(latLng) {
            $('location_attributes_latitude').value = latLng.lat();
            $('location_attributes_longitude').value = latLng.lng();
            $('location_attributes_gmaps_zoom').value = Gmaps.map.map.getZoom();
        }
        // Add a marker with an open infowindow
        function placeMarker(latLng) {
            var marker = new google.maps.Marker({
                position: latLng, 
                map: Gmaps.map.map,
                draggable: true
            });
            markersArray.push(marker);
            // Set and open infowindow
            var infowindow = new google.maps.InfoWindow({
                content: '<div class="popup"><h2>Awesome!</h2><p>Drag me and adjust the zoom level.</p>'
            });
            infowindow.open(Gmaps.map.map,marker);
            // Listen to drag & drop
            google.maps.event.addListener(marker, 'dragend', function() {
                updateFormLocation(this.getPosition());
            });
        }
        // Removes the overlays from the map
        function clearOverlays() {
          if (markersArray) {
            for (var i = 0; i < markersArray.length; i++ ) {
              markersArray[i].setMap(null);
            }
          }
          markersArray.length = 0;
        }
    </script>
<% end %>

Но без удачи ... Я предполагаю, что это больше проблема с именем / идентификатором моей области (полей), простите мои знания JavaScript

Я изменил поля для обновления с координатами:

function updateFormLocation(latLng) {
  $('location[lat]').value = latLng.lat();
  ...
}

Но поле не обновляется:

= simple_form_for :location do |l|
  = l.input :lat
  ...

Я что-то упустил? Спасибо!

Ответы [ 2 ]

3 голосов
/ 24 февраля 2012

Похоже, этот синтаксис написан для прототипа.Если вы используете rails 3.1 с jQuery, вам нужно обновить этот синтаксис, чтобы найти ваши DOM-узлы.

, т.е. если вы ищете элемент с id "location_attributes_latitude", вам необходимо использовать

 $('#location_attributes_latitude')

И для того, чтобы установить значение:

$('#location_attributes_latitude').val(latLng.lat());
0 голосов
/ 07 ноября 2012

Если вам нужно только удалить маркер существующего обновления, просто нужно сделать это

location_gmaps = () ->
  Gmaps.map.callback = () ->
    google.maps.event.addListener Gmaps.map.markers[0].serviceObject, 'dragend', (event) ->
      updateFormLocationEventos(event.latLng)

# Update form attributes with given coordinates
updateFormLocationEventos = (point) ->
  $('#event_position_latitude').val(point.lat())
  $('#event_position_longuitude').val(point.lng())

Я надеюсь, что это поможет вам

...