如何在Rails 3.1资产管道中正确使用jQuery?

我正在开发一个爱好应用程序并使用一些jQuery。 结果很好,但我是一个jQuery noob,我认为我可以对代码结构做出一些重大改进。 暂且不考虑Coffescript,我一直想知道的一件事是如何在资产管道中正确使用特定于模型的.js文件。

例如,在使用我的用户模型时,我可能会在文档准备好时运行一些我想要运行的代码。 假设我把它放在$(document).ready(function() {...}); 在Rails 3.1生成的users.js文件中。

第二天,我正在使用Pet模型,我想要在文档准备好的情况下运行代码。 我把它放在另一个$(document).ready(function() {...}); 在Rails准备的pets.js文件中。

这是我的问题出现的地方:

  1. 应用程序运行时如何编译?
  2. 我用上面的例子实例化了两个jQuery实例吗?
  3. 我应该只使用$(document).ready(function() {...}); 一旦进入应用程序或Rails将我的代码编译成一个单独的调用?
  4. 什么属于特定于模型的.js文件?
  5. 它在开发和生产模式中的执行方式是否存在差异?

1)编译:Rails资产管道只是将所有javascript文件合并到一个大文件中。

2)jquery只加载一次,你有多个$(document).ready函数,但这不是问题

3)Rails对调用没有任何作用,jQuery可以安全地处理每页的更多块。

4)你称之为模型特定的.js ,我宁愿称之为控制器特定的。 您将function组合在一起。 将它们联系在一起的东西是控制器还是模型真的无关紧要。 我们将js拆分为单独的文件,以使其更易于管理。

5)在开发过程中,资产是根据每个请求编译的,在生产中它只进行一次。 同样在生产中,它可以缩小和压缩。

希望这可以帮助。

我会尝试为你回答其中的一些问题。 你真的只想要每页1个文件准备好的电话,但是如果你有倍数就没关系。 它们中包含的内容将是DOM加载到浏览器后执行的代码。 Rails不会对javascript做任何神奇的事情,它会和你在文件中写的一样。 Rails不会以时髦的方式编译javascript代码,对于生产环境,它可能会缩小它,但实际代码将保持大致相同。 这是由浏览器执行的 – 而不是服务器。

您没有实例化2个实例,因为jQuery只加载一次,然后被引用。 $(document).ready()调用本质上只是一个函数,仅此而已。

特定于模型的jquery文件可以在rails应用程序中与Ajax结合使用。 所以你可以拥有像’create.js.erb’这样的文件,它实际上是一个你可以将rails操作传递到的javascript文件。 如果你想在创建/删除post之后触发某些特定的代码,那么你可以使用这样的文件来做到这一点,你只需要在你的rails控制器中响应javascript – 但是你的意思是看看你上面的问题。

要记住的主要事情是jquery只是javascript和javascript由浏览器运行 – 在前端没有任何动态集成,总是在客户端运行,jquery主要用于DOM操作。

希望这会清除一些东西!