可以将Google Map的Javascripts放入Asset管道(Rails)吗?

dbo*_*man 9 javascript ruby-on-rails asset-pipeline

我添加了将谷歌地图加载到我的页面所需的JavaScript:

<% content_for :head do %>

<script type="text/javascript"
src="https://maps.googleapis.com/maps/api/js?key=API_KEY&sensor=false">
</script>
<script type="text/javascript">
function initialize() {
    var mapOptions = {
        center: new google.maps.LatLng(<%=@lat%>, <%=@lon%>),
        zoom: 5,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    var map = new google.maps.Map(document.getElementById("map_canvas"),
        mapOptions);
}
</script>

<% end %>
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我需要在加载地图时传递参数纬度和经度.正如我在标题中所说,我想将这些javascripts放入资产管道中,是否有可能如何?谢谢

dee*_*our 13

您不应在Google资源管道生成的application.js文件中包含Google Maps API .相反,它应该作为单独的<script>标记包含application.js的标记之前<script>.

然后,您可以将initialize()方法添加到资产管道中包含的任何文件中,包括application.js其自身.

你可能想要制作你的方法@lat@lon参数,initialize所以它们可以在你的页面中定义<head>.例如,你可能有

<head>
  <script src="https://maps.googleapis.com/maps/api/js?key=API_KEY&sensor=false"></script>
  <%= javascript_include_tag "application" %>

  <script>
    var latitude  = <%= @lat %>;
    var longitude = <%= @lon %>;
  </script>
</head>
Run Code Online (Sandbox Code Playgroud)

在您的application.js文件中,您可能有

function initialize(latitude, longitude) {
  var mapOptions = {
      center: new google.maps.LatLng(latitude, longitude),
      zoom: 5,
      mapTypeId: google.maps.MapTypeId.ROADMAP
  };
  var map = new google.maps.Map(document.getElementById("map_canvas"),
      mapOptions);
}

$(function() {
  initialize(latitude, longitude);
});
Run Code Online (Sandbox Code Playgroud)