gmaps4rails - переместить маркер на новую позицию

У меня есть приложение, в котором информация GPS извлекается из фотографии с данными GPS. Когда я хочу обновить позицию с помощью действия редактирования, я хотел бы перетащить маркер, заменить его и сохранить новую позицию. Когда я нажимаю на карту, старый маркер все еще там, поэтому есть два маркера. Первый старый, а второй новый, перетаскиваемый. Я обновляю идентификаторы форм в javascript, но новая позиция не сохраняется. Когда я проверяю длину массива в javascript, там ничего нет. Но если я вижу источник страницы, в массиве мало маркеров. Я что-то упускаю?

Спасибо

property_controller.rb

def edit
  @property = Property.find(params[:id])
  @json = Property.find(params[:id]).to_gmaps4rails
end

def update
  @property = Property.find(params[:id])
  if @property.update_attributes(params[:property])
    redirect_to @property, notice: 'Property was successfully updated.' 
  else
    render action: "edit"
  end
end

редактировать.html.erb

<%= render 'form' %>

<div id="map_canvas">
 <%= gmaps("map_options" => { "zoom" => 15, "auto_adjust" => true, "auto_zoom" => false},
      "markers" => {"data" => @json}) %>
</div>

<% 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.serviceObject, 'click', function(event) {
          clearOverlays();
          placeMarker(event.latLng);
          updateFormLocation(event.latLng);
        });
    };
    // Update form attributes with given coordinates
    function updateFormLocation(latLng) {
        $('#property_latitude').val(latLng.lat());
        $('#property_longitude').val(latLng.lng());
        $('#property_gmaps_zoom').val(Gmaps.map.serviceObject.getZoom());
    }
    // Add a marker with an open infowindow
    function placeMarker(latLng) {
        var marker = new google.maps.Marker({
            position: latLng, 
            map: Gmaps.map.serviceObject,
            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.serviceObject,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].serviceObject.setMap(null);
          //markersArray[i].setMap(null);
        }
      }
      markersArray.length = 0;
    }
</script><% end %>

_form.html.erb

<%= simple_form_for @property,  :html => {:multipart => true}  do |f| %>

<%= f.error_notification %>

<div class="form-inputs">
  <%= f.input :name, :label => "Název", :input_html => { :class => "input-xlarge"} %>
  <%= f.input :description, :label => "Popis", :input_html => { :class => "input-xlarge", :rows => "6"} %><br />
  <%= f.hidden_field :latitude %>
  <%= f.hidden_field :longitude %>
  <%= f.input :date, :label => "Datum", :as => :date %>
  <%= f.file_field :photo %>
</div>

<div class="form-actions">
  <%= link_to 'Zpět', properties_path, :class => 'btn' %>
  <%= f.button :submit, :class => 'btn-primary' %>
</div>
<% end %>

person tomasg    schedule 31.08.2012    source источник


Ответы (1)


Вы используете markersArray, не поддерживаемый javascript драгоценного камня.

Вы должны просто использовать Gmaps.map.markers, он содержит всю информацию о маркерах.

person apneadiving    schedule 31.08.2012
comment
Это наверное проблема. И вторая проблема, которая у меня есть, это не стирание исходного маркера, когда я помещаю новый. Я использую js со страницы gem. - person tomasg; 06.09.2012