0

谢谢你看我的问题。

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

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

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

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

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

谢谢您的帮助。

4

1 回答 1

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 .
于 2013-07-17T18:23:39.653 回答