1

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

Спасибо

properites_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 

edit.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 %> 

ответ

2

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

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

+0

Возможно, это проблема. И вторая проблема, которая у меня есть, - это не очистка оригинального маркера, когда я помещаю новый. Я использую js from gem page. – tomasg

Смежные вопросы