2016-05-06 2 views
0

В моем приложении rails я пытаюсь использовать google maps javascript api для рендеринга карты в частичном представлении. В основном я сделал то же самое, что описано в документации Google (https://developers.google.com/maps/documentation/javascript/examples/places-autocomplete), однако мой запрос api ничего не возвращает и карта не отображается.Google map не отображается

application.html.erb

<!DOCTYPE html> 
<html> 
<head> 
    <title>Testt</title> 
    <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyHkeUeKHSHKNPUHkAeYHDFE0ZBwGvBF&callback=initMap&libraries=places" async defer></script> 
    <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> 
    <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> 
    <%= csrf_meta_tags %> 
</head> 
<body> 

<%= yield %> 

</body> 
</html> 

Parial вид:

<input id="pac-input" class="controls" type="text" placeholder="Enter place"> 
<div id="type-selector" class="controls"> 
    <input type="radio" name="type" id="changetype-all" checked="checked"> 
    <label for="changetype-all">All</label> 

    <input type="radio" name="type" id="changetype-establishment"> 
    <label for="changetype-establishment">Establishments</label> 

    <input type="radio" name="type" id="changetype-address"> 
    <label for="changetype-address">Addresses</label> 

    <input type="radio" name="type" id="changetype-geocode"> 
    <label for="changetype-geocode">Geocodes</label> 
</div> 
<div id="map"></div> 

файл расслоение плотной:

function initMap() { 
var map = new google.maps.Map(document.getElementById('map'), { 
    center: {lat: -33.8688, lng: 151.2195}, 
    zoom: 13 
}); 
var input = /** @type {!HTMLInputElement} */(
    document.getElementById('pac-input')); 

var types = document.getElementById('type-selector'); 
map.controls[google.maps.ControlPosition.TOP_LEFT].push(input); 
map.controls[google.maps.ControlPosition.TOP_LEFT].push(types); 

var autocomplete = new google.maps.places.Autocomplete(input); 
autocomplete.bindTo('bounds', map); 

var infowindow = new google.maps.InfoWindow(); 
var marker = new google.maps.Marker({ 
    map: map, 
    anchorPoint: new google.maps.Point(0, -29) 
}); 

autocomplete.addListener('place_changed', function() { 
    infowindow.close(); 
    marker.setVisible(false); 
    var place = autocomplete.getPlace(); 
    if (!place.geometry) { 
    window.alert("Autocomplete's returned place contains no geometry"); 
    return; 
    } 

    // If the place has a geometry, then present it on a map. 
    if (place.geometry.viewport) { 
    map.fitBounds(place.geometry.viewport); 
    } else { 
    map.setCenter(place.geometry.location); 
    map.setZoom(17); // Why 17? Because it looks good. 
    } 
    marker.setIcon(/** @type {google.maps.Icon} */({ 
    url: place.icon, 
    size: new google.maps.Size(71, 71), 
    origin: new google.maps.Point(0, 0), 
    anchor: new google.maps.Point(17, 34), 
    scaledSize: new google.maps.Size(35, 35) 
    })); 
    marker.setPosition(place.geometry.location); 
    marker.setVisible(true); 

    var address = ''; 
    if (place.address_components) { 
    address = [ 
     (place.address_components[0] && place.address_components[0].short_name || ''), 
     (place.address_components[1] && place.address_components[1].short_name || ''), 
     (place.address_components[2] && place.address_components[2].short_name || '') 
    ].join(' '); 
    } 

    infowindow.setContent('<div><strong>' + place.name + '</strong><br>' + address); 
    infowindow.open(map, marker); 
}); 

// Sets a listener on a radio button to change the filter type on Places 
// Autocomplete. 
function setupClickListener(id, types) { 
    var radioButton = document.getElementById(id); 
    radioButton.addEventListener('click', function() { 
    autocomplete.setTypes(types); 
    }); 
} 

setupClickListener('changetype-all', []); 
setupClickListener('changetype-address', ['address']); 
setupClickListener('changetype-establishment', ['establishment']); 
setupClickListener('changetype-geocode', ['geocode']); 
} 

ответ

0

попытаться дать высоту и ширину Div

<div id="map" style="width:300px; height:300px;"> 
Смежные вопросы