3

我正在从 Rails 3.0.20 升级到 Rails 3.1.10。(稍后我将升级到 3.2,但我希望首先在 3.1 中使用我的代码库进行更重大的更改。我没有测试套件,所以请多多包涵,因为我克服了相当多的技术债务。值得庆幸的是,该应用程序并没有那么大或复杂。)

我的应用程序中的各种视图总是有单独的 JS 文件。现在,Asset Pipeline 想要将所有这些组合到一个文件中。问题是,我的很多变量和函数名称发生冲突,通常只会导致问题。

我的假设是我需要在这里使用某种命名空间,然后在需要它的页面上的特定命名空间中初始化代码。

有没有标准的方法来做到这一点?或者,总体上有更好的方法吗?

澄清一点:我还没有准备好切换到 CoffeeScript。

4

2 回答 2

4

资产管道的基石是清单文件。默认情况下,Rails 会在以下位置为 JavaScript 文件创建一个

app/assets/javascripts/application.js

此清单使用指令来声明资产源文件中的依赖项。这些指令之一是

require_tree

它的工作方式类似于 require 目录,但递归操作需要所有子目录中的所有文件。在我的 Rails 应用程序中,生成的application.js包含

//= require_tree .

这需要 JavaScript 资产文件夹中的所有文件。通过删除它,不再将所有 JavaScript 文件合并为一个。然后,您必须要求每个视图的 JavaScript 文件。这在 Rails 中每个视图的 JavaScript 文件问题中得到了回答。


话虽如此,请重新考虑您的计划。毕竟 Rails 这样做不是为了惹恼你,而是有目的的。出于效率的原因,您应该尽可能少地使用 HTTP 请求。如果你所有的 JavaScript 代码都被预先加载,你可能会有更好的性能,例如由于缓存。

于 2013-05-08T21:15:14.740 回答
0

资产管道将允许为每个视图使用单独的 js 文件。在 app/assets/javascripts 中,您将能够为每个视图创建一个单独的 js 文件。因此,假设您有模型书籍和杂志。在 app/assets/javascripts 中,您可以为每个模型/视图拥有 books.js 和 magazines.js(或咖啡)。

此外,如果您还没有看过http://railscasts.com/episodes/282-upgrading-to-rails-3-1,请看一看。

于 2013-04-09T12:55:50.360 回答