gmaps4rails - 删除表单中的标记和更新字段属性

时间:2012-02-24 05:24:25

标签: ruby-on-rails-3 gmaps4rails

我正在尝试从gem wiki 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 %>

但是没有运气......我猜测我的领域的名称/ id更多是一个问题,原谅我的javascript知识。

我已使用坐标更改要更新的字段:

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

但该字段未更新:

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

我错过了什么吗?谢谢!

2 个答案:

答案 0 :(得分:3)

从表面上看,该语法是为原型编写的。如果您使用带有jQuery的rails 3.1,则需要更新该语法以找到您的DOM节点。

即。如果您要查找ID为"location_attributes_latitude"的元素,则需要使用:

 $('#location_attributes_latitude')

并且为了设置值:

$('#location_attributes_latitude').val(latLng.lat());

答案 1 :(得分:0)

如果您只需要删除更新存在标记,只需要执行此操作

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())

我希望这可以帮到你