感谢您查看我的问题。
我正在研究一个简单的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文件中的内联脚本标记访问初始化函数,即使它正在加载? 有没有比手动包含更好的方法来解决这种情况?
感谢您的帮助。
答案 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 .