【发布时间】:2013-02-16 04:50:49
【问题描述】:
我有一个带有标准资产管道的 Rails 3.2 应用程序 - 也就是说,控制器在单独的 CoffeeScript 文件中定义了自己的 Javascript。
我今天注意到在开发模式下(当所有 JS 文件在每个页面上单独加载时)它们在某个时间点后停止工作。我假设这是因为它上面的一个文件中的某个地方存在一个神秘错误。控制台显示两个与该页面上未找到的元素相关的错误(意料之中,因为它们来自不同的控制器)。
但是,我查看了生产应用程序,并且发生了同样的事情。我在主页的页面控制器上,查看了小型化的 JS 文件并找到了对完全独立控制器的引用。同样的错误也存在,说在该页面上找不到元素。再一次,在那之后的 JS 都失败了并且无法正常工作。
我假设 Rails 只编译了控制器 JS?如果不是这种情况,我该怎么做才能让某些JS只出现在某些页面上?
提前感谢您的帮助!
【问题讨论】:
-
我相信这是资产管道的默认行为,您可以单独加载它们,请参阅此答案stackoverflow.com/questions/602147/… 但您还需要考虑性能,将所有内容都整合到一个文件中一个 HTTP 请求而不是多个 HTTP 请求,然后可以将其缓存,从而提高性能
-
贾斯汀,您在页面上收到的错误正在破坏您的 JS(或 js 的其余加载)。修复这些错误,然后看看你是否可以重现不工作的部分
-
@Richlewis - 我认为将它们全部放在一个文件中是最有意义的,否则每个页面都需要单独下载不同的小型化文件。但是,如何在 jQuery/CoffeeScript 中指定仅在某些页面上运行某些函数?我的错误是由于用户不在页面上并且选择器的元素丢失...
-
@ilanberci - 是的,我知道这是导致问题的原因,并且我知道错误(见上文,关于页面上没有的元素)。我更想知道如何在不存在元素的页面上加载这些 JS 文件。
标签: jquery ruby-on-rails ruby-on-rails-3 coffeescript