我的assets / javascripts /目录中有一个js文件。正确地通过rails拾取此文件(当我检查页面的head
标记时,我可以在firebug中看到它)
我在 application.js 中调用此js文件中的函数,如下所示:
//
//= require jquery
//= require jquery_ujs
//= require bootstrap
//= require_tree .
$(window).load(function(){
Boxlayout.init();
});
我在某处读到必须使用init()
函数调用.load
函数,以便在加载DOM之后调用它们。
但是这里的javascript无效。
相反,当我明确地将js文件包含在:
时<%= javascript_include_tag "file.js" %>
位于页面底部并从application.js调用相同的init
函数,javascript工作正常。
我不想明确包含该文件。 (想要以轨道的方式去做)。那我怎么用第一种方法呢?
修改
使用 Rails 3.2.14 (无Turbolinks)。
此外,Javascript 无法在Heroku上运行虽然它在本地运行正常。
答案 0 :(得分:1)
尝试更改
$(window).load(function(){
到
$(document).ready(function(){
答案 1 :(得分:0)
你有// = require_tree。在application.js中,我将尝试在assets / javascripts /目录中创建新文件* .js,并在那里附加你的代码。
答案 2 :(得分:0)
我认为这是一个涡轮机问题。
Turbolinks在您点击链接时通过AJAX交换页面正文但保持头部完好无损。因为CSS和JavaScript只在浏览会话开始时下载和解析,所以你可以大大提高速度。
缺点是你的jQuery加载事件不会被触发。这解释了当您将脚本嵌入页面主体时执行脚本的原因,而不是将脚本正确放置在头部时。
尝试包含jQuery turbolinks gem。这将在激活turbolink时触发预期的jQuery事件。