2011-11-23 78 views
16

我正在开发一个业余爱好应用程序,并使用一些jQuery。结果现在很好,但我是一个jQuery noob,我认为我可以对代码结构进行一些重大改进。暂且抛开Coffescript,我一直在想的是如何在资产管道中正确使用特定于型号的.js文件。如何正确使用Rails 3.1资产管道中的jQuery?

例如,在使用我的用户模型时,我可能会在文档准备就绪时运行一些代码。假设我在$(document).ready(function() {...});中输入了由Rails 3.1生成的users.js文件。

第二天,我正在使用Pet模型,并且我有要运行的文档准备就绪的代码。我把它放在Rails准备的pets.js文件的另一个$(document).ready(function() {...});内。

这里就是我的问题出现了:

  1. 那如何编译当应用程序运行?
  2. 我用上面的例子实例化两个jQuery实例吗?
  3. 我应该只在应用程序中使用$(document).ready(function() {...});还是Rails会将我的代码编译为单个调用?
  4. 什么属于型号专用.js文件?
  5. 在开发和生产模式下它将如何执行有什么区别?

回答

12

1)编译:Rails assets pipeline只将一个大文件中的所有javascript文件合并在一起。

2)jQuery是只装载一次,你有多个$(document).ready功能,但是这是没有问题的

3)Rails没有做与呼叫任何东西,和jQuery可以安全地处理更多的每个区块的页。

4)您称之为特定型号.js,我宁愿将其称为控制器特定。您将属于一起的功能组合在一起。将它们联系在一起的东西是控制器还是模型真的没有关系。我们把我们的js分成不同的文件,使它更易于管理。

5)在开发过程中,资产按每个请求进行编译,在生产中它只进行一次。在生产中它也可以被缩小和压缩。

希望这会有所帮助。

3

我会尝试为你解答其中的一些问题。你只需要每个页面准备1个文件,但是如果你有多个文件,这并不重要。无论它们包含在哪里,都将成为DOM加载到浏览器后执行的代码。 Rails不会对JavaScript做任何不可思议的事情,它会和你在文件中写的一样。 Rails不会以时髦的方式编译JavaScript代码,对于可能缩小它的生产环境,但实际的代码将保持大致相同。这由浏览器执行 - 不是服务器。

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

模型特定的jquery文件可以与Rails应用程序中的Ajax结合使用。所以你可以有像'create.js.erb'这样的文件,它实际上是一个JavaScript文件,你可以将rails动作传入。如果你想在创建/删除后发布一些特定的代码,那么你可以使用这样的文件来做到这一点,你只需要在你的轨道控制器中响应javascript即可 - 但是这要深入一些,你的意思是上面的问题的外观。

要记住的主要事情是jQuery只是JavaScript和JavaScript获取由浏览器运行 - 在没有任何动态集成的前端,将始终运行在客户端,jquery主要用于DOM操作。

希望这会清除一些东西!

+0

感谢您的额外信息。 – Clay