【发布时间】:2018-10-16 01:49:23
【问题描述】:
我正在尝试将 Google Maps Javascript API 添加到 Rails 5.2 网络应用程序。我有一个启用了 Google Maps Javascript API 的 Google Developer 帐户和 API 密钥。 Google 文档中的示例代码位于https://developers.google.com/maps/documentation/javascript/tutorial。我用我的 API_KEY 把它放在一个普通的 html 文件中,它工作正常。但我无法让它在 Rails 中正常工作。三个重要的代码部分是:
1) 在我的 html 页面上添加一个 id=map 的 div。这是显示地图的地方。
# app/views/pages/map_page.html.erb
<div id="map"></div>
2) 使用我的 API 密钥调用 Google API,然后回调函数 initMap。我把它放在 application.html.erb 文件的头部。
# app/views/layouts/application.html.erb
<script src="https://maps.googleapis.com/maps/api/jskey=MY_API_KEY&callback=initMap"
async defer></script>
<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
3) 使用地图的硬编码坐标定义 initMap 函数。我把它放在它自己的js文件中。
# app/assets/javascripts/map.js
var map;
function initMap() {
map = new google.maps.Map(document.getElementById('map'), {
center: {lat: -34.397, lng: 150.644},
zoom: 8
});
}
此设置仅在我刷新页面一次或多次时才有效。我确信这是与 turbolinks 相关的,但如果我尝试为 turbolinks 包装函数,它会变得更糟。然后我得到一个错误,无论我刷新页面多少次,initMap 都不是一个函数。
document.addEventListener("turbolinks:load", function() {
var map;
function initMap() {
map = new google.maps.Map(document.getElementById('map'), {
center: {lat: -34.397, lng: 150.644},
zoom: 8
});
}
});
根据另一个 SO 回答,我将 application.html.erb 中的 Google API 调用更改为以下添加 data-turbolinks-eval="false。不走运。
<script async
src="https://maps.googleapis.com/maps/api/jskey=MY_API_KEY&callback=initMap"
defer data-turbolinks-eval="false"></script>
如何在不刷新页面的情况下使其正常工作?
【问题讨论】:
标签: javascript ruby-on-rails google-maps