如何在Rails 3.1资产管道中正确使用jQuery?
我正在开发一个爱好应用程序并使用一些jQuery。 结果很好,但我是一个jQuery noob,我认为我可以对代码结构做出一些重大改进。 暂且不考虑Coffescript,我一直想知道的一件事是如何在资产管道中正确使用特定于模型的.js
文件。
例如,在使用我的用户模型时,我可能会在文档准备好时运行一些我想要运行的代码。 假设我把它放在$(document).ready(function() {...});
在Rails 3.1生成的users.js
文件中。
第二天,我正在使用Pet模型,我想要在文档准备好的情况下运行代码。 我把它放在另一个$(document).ready(function() {...});
在Rails准备的pets.js
文件中。
这是我的问题出现的地方:
- 应用程序运行时如何编译?
- 我用上面的例子实例化了两个jQuery实例吗?
- 我应该只使用
$(document).ready(function() {...});
一旦进入应用程序或Rails将我的代码编译成一个单独的调用? - 什么属于特定于模型的
.js
文件? - 它在开发和生产模式中的执行方式是否存在差异?
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操作。
希望这会清除一些东西!