我正在构建一个 Rails 4 应用程序,我有一些分散的 js 文件,我试图包含“rails 方式”。我将 jquery 插件移到 /vendor/assets/javascripts 中,并更新了清单 (application.js) 以要求它们。当我在本地加载页面时,我看到它们显示正确。
但是,我从一个已编译的脚本中得到了不一致的行为。我有一个名为 projects.js 的特定于控制器的 js 文件,它在 application.js 中通过以下方式引用require_tree .
:
//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require bootstrap.min
//= require jquery.form.min
//= require_tree .
我看到该文件已正确包含,并且可以正常工作……一半时间。另一半时间,projects.js 中的东西似乎没有做任何事情(主要是 jquery 动画和一些 ajax 请求)。当它不起作用时,我会单击按钮几次,什么都不会发生,然后我会抛出这个错误:
Uncaught TypeError: Cannot read property 'position' of null
turbolinks.js?body=1:75
当脚本位于单独的视图中时(错误的方式),这从未发生过,所以我相当确定问题不在于我的 javascript 代码。另一个可能相关的细节是 projects.js 中的内容被包装在一个$(document).ready(function(){
. 另外,我正在开发模式下进行测试,因此资产管道不会将 javascripts 和 css 组合在一起。
知道这里发生了什么吗?我是 Rails 的新手,但我已尽力遵守所有惯例。
更新!
当我的项目脚本不起作用时,这是可以预见的。第一个页面加载每次都有效。然后我单击一个链接到一个使用我的 project.js 行为的新页面,而第二个页面永远不会工作。我点击了几次,最终抛出了上面的错误。我仍然不确定为什么,但我怀疑这与涡轮链接有关。