资产/ javascripts加载资产,但静态页面无法访问JS

时间:2013-07-17 18:19:53

标签: ruby-on-rails asset-pipeline

感谢您查看我的问题。

我正在研究一个简单的rails 3应用程序,只是为了学习框架,基本上我在理解资产管道方面遇到了一些麻烦。

我在app / assets / javascripts中有一个名为map.js的文件,该文件包含一个简单的谷歌地图初始化函数。

我正在使用require_tree(即我的application.js文件中有//= require_tree .),当我访问http://localhost:3000/assets/application.js时,我确实看到map.js文件已被拉入application.js < / p>

我有以下application.html.erb文件:

<!DOCTYPE html>
<html>
  <head>
    <title><%= full_title(yield(:title)) %></title>
    <%= stylesheet_link_tag "application", media: "all" %>
    <%= javascript_include_tag "https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=true" %>
    <%= csrf_meta_tags %>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
    <meta charset="utf-8">
    <%= render 'layouts/shim' %>
    <script>
      google.maps.event.addDomListener(window, 'load', initialize);
    </script>   
  </head>

  <body>
    <%= render 'layouts/header' %>
    <div class="container">
      <% flash.each do |key, value| %>
        <div class="alert alert-<%= key %>"><%= value %></div>
      <% end %>
      <%= yield %>
      <%= render 'layouts/footer' %>
    </div>
  </body>

</html>

即使将map.js加载到application.js文件中,调用initialize函数也会产生引用错误(未定义initialize)。如何从内联脚本标记访问初始化函数(加载到application.js中)。如果我使用javascript_include_tag手动包含javascript,即<%= javascript_include_tag "map.js" %>,地图呈现并且一切正常,但我担心js文件被加载两次。

我有两个问题。  为什么我不能从application.html.erb文件中的内联脚本标记访问初始化函数,即使它正在加载?  有没有比手动包含更好的方法来解决这种情况?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

试试这个

<script>
    window.onload = function () { 
     google.maps.event.addDomListener(window, 'load', initialize);
    }
</script>

将此添加到您的application.html.erb:

  <%= javascript_include_tag "application" %>

所有js文件也必须位于assets / javascripts文件夹

和application.js 应该有这个:

// This is a manifest file that'll be compiled into application.js, which will include all the files
//
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
// or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
//
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
// the compiled file.
//
// WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
// GO AFTER THE REQUIRES BELOW.
//
//= require_tree .