【发布时间】:2013-09-17 03:01:04
【问题描述】:
我正在构建一个 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 行为的新页面,而 second 页面永远不会工作。我点击了几次,最终抛出了上面的错误。我仍然不确定为什么,但我怀疑这与 turbo-linking 有关。
【问题讨论】:
-
一行解决方案(CoffeeScript):
$(document).on 'ready page:load', -> -
这篇文章用一个很好的例子解决了这个问题。 stackoverflow.com/questions/18770517/…
标签: javascript ruby-on-rails-4 turbolinks