我正在进行从Rails 3.0.20到Rails 3.1.10的早该进行的升级。 (稍后我会升级到3.2,但我希望3.1中首先使用我的代码库进行更大的改动。我没有测试套件,所以请耐心等待我,因为我克服了相当多的技术债务。值得庆幸的是,该应用程序并不大或复杂。)
我的应用程序中的各种视图总是有单独的JS文件。现在,Asset Pipeline想要将所有这些组合成一个文件。问题是,我的很多变量和函数名称都会发生碰撞,通常会引起问题。
我的假设是我需要在这里使用某种命名空间,然后在需要它的页面上的特定命名空间中初始化代码。
有没有标准的方法来做到这一点?或者,整体上有更好的方法吗?
一个澄清的说明:我还没准备好切换到CoffeeScript。
答案 0 :(得分:4)
资产管道的基石是清单文件。默认情况下,Rails会在
处为JavaScript文件创建一个app/assets/javascripts/application.js
此清单使用指令来声明资产源文件中的依赖项。其中一个指令是
require_tree
与require目录一样,但以递归方式运行,需要所有子目录中的所有文件。在我的Rails应用程序中,生成的application.js
包含
//= require_tree .
这需要JavaScript资源文件夹中的所有文件。通过删除它,并不是所有的JavaScript文件都会合并为一个。然后,您必须为每个视图要求JavaScript文件。这在问题JavaScript file per view in Rails中得到了解答。
话虽如此,请重新考虑您的计划。毕竟Rails不这样做是为了惹恼您,但是出于某种目的。出于效率原因,您应该尽可能少地使用HTTP请求。如果您的所有JavaScript代码都已预先加载,则可能会有更好的性能,例如由于缓存。
答案 1 :(得分:0)
资产管道将允许每个视图使用单独的js文件。在app / assets / javascripts中,您将能够为每个视图提供单独的js文件。所以,让我们说你有模特书籍和杂志。在app / assets / javascripts中,您可以为每个模型/视图提供books.js和magazines.js(或咖啡)。
此外,如果你没有看过http://railscasts.com/episodes/282-upgrading-to-rails-3-1给它一看/看。