我在使用 gmap4rails 时遇到了一个非常奇怪的问题。我完全按照 github 上的设置,我只得到一个空白框。我可以看到对地图提供者(在本例中为 Bing)进行了调用,但从未渲染任何地图。
在分析 javascript 时,Gmap4rails 代码永远不会执行。
我的观点是这样的:
<%= gmaps("markers" => {"data" => @map},
"map_options" => { "zoom" => 15, "provider" => "bing", "provider_key" => ENV['BING_MAPS_API_KEY'], "auto_adjust" => true }) %>
通过“<%= yield :scripts %>”嵌入页面的 Javascript(我在这里删除了我的 API 密钥,但它在我的页面上):
<script src="http://ecn.dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=7.0" type="text/javascript"></script>
<script type="text/javascript">
Gmaps.map = new Gmaps4RailsBing();
Gmaps.load_map = function() {
Gmaps.map.map_options.zoom = 15;
Gmaps.map.map_options.provider = "bing";
Gmaps.map.map_options.provider_key = "<key here>";
Gmaps.map.initialize();
Gmaps.map.markers = [{"lat":39.45000076293945,"lng":-98.90799713134766}];
Gmaps.map.create_markers();
Gmaps.map.adjustMapToBounds();
Gmaps.map.callback();
};
Gmaps.oldOnload = window.onload;
window.onload = function() { Gmaps.triggerOldOnload(); Gmaps.loadMaps(); };
</script>
如果我从我的 js 清单中删除 jquery,则会显示地图并执行 gmap4rails javascript。(我只是偶然发现了这一点,因为我使用的是 jquery-rails-cdn 并认为它可能有冲突,所以我删除了它,没有将 jquery 重新添加到清单中)。
我认为这可能与 onload 调用有关,也许它应该是一个准备好的调用?
我还应该提到我正在使用 Twitter Bootstrap。我确实已经按照建议添加了 css 修改,并通过 sass 需要该文件。
CSS看起来像这样:
#map img {
max-width: none;
}
#map label {
width: auto; display:inline;
}
.map_container {
padding: 6px;
border-width: 1px;
border-style: solid;
border-color: #ccc #ccc #999 #ccc;
-webkit-box-shadow: rgba(64, 64, 64, 0.5) 0 2px 5px;
-moz-box-shadow: rgba(64, 64, 64, 0.5) 0 2px 5px;
box-shadow: rgba(64, 64, 64, 0.1) 0 2px 5px;
width: 800px;
}
.gmaps4rails_map {
width: 800px;
height: 400px;
}
.bing_map {
position: absolute;
top: 20;
left: 10;
width: 400px;
height: 400px;
border:#555555 2px solid;
}
最终目标是将地图放在引导选项卡窗格中(可能是另一个令人头疼的问题),但现在我只是想让它显示在页面上。
我真的很感谢社区提供的任何帮助——一段时间以来,我一直在用这个键盘敲打我的脑袋。