gmaps4rails - удалить маркер и обновить атрибут полей в форме

Я пытаюсь реализовать это из вики gem 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
  ...

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


person miligraf    schedule 24.02.2012    source источник


Ответы (2)


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

то есть, если вы ищете элемент с идентификатором "location_attributes_latitude", вам нужно использовать:

 $('#location_attributes_latitude')

И чтобы установить значение:

$('#location_attributes_latitude').val(latLng.lat());
person ian    schedule 24.02.2012
comment
похоже, вы заметили проблему - person apneadiving; 24.02.2012
comment
Для работы мне также пришлось изменить .value = latLng.lat(); в .val(latLng.lat()); - person miligraf; 24.02.2012
comment
эй, ребята, я тоже застрял на этом. У меня есть модель с именем вещь, и я использую вложенную_форму для создания нового экземпляра вещи (: имя,: описание,: широта,: долгота). Я думаю, мне нужно изменить функцию updateFormLocation, но я не знаю, как это сделать. Должно ли это быть $('#thing_attributes_latitude').val(latLng.lat()) ? - person adamteale; 20.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())

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

person Jorge García    schedule 07.11.2012