我正在开发一个爱好应用程序并使用一些jQuery。结果很好,但我是一个jQuery noob,我认为我可以对代码结构做一些重大改进。暂时搁置Coffescript,我一直想知道的一件事是如何在资产管道中正确使用特定于模型的.js
文件。
例如,在使用我的用户模型时,我可能会在文档准备好时运行一些我想要运行的代码。假设我把它放在$(document).ready(function() {...});
中由Rails 3.1生成的users.js
文件中。
第二天,我正在使用Pet模型,我想要在文档准备好的情况下运行代码。我把它放在Rails准备的$(document).ready(function() {...});
文件的另一个pets.js
内。
以下是我的问题所在:
$(document).ready(function() {...});
一次,还是Rails将我的代码编译成一个电话?.js
文件?答案 0 :(得分:12)
1)编译:Rails资产管道只是将所有javascript文件合并到一个大文件中。
2)jquery只加载一次,你有多个$(document).ready
函数,但这不是问题
3)Rails对调用没有任何作用,jQuery可以安全地处理每页的更多块。
4)您将其称为特定于模型的.js
,我宁愿将其称为特定于控制器。您将功能组合在一起。将它们联系在一起的东西是控制器还是模型真的无关紧要。我们将js拆分为单独的文件,以使其更易于管理。
5)在开发过程中,资产是根据每个请求编译的,在生产中它只进行一次。同样在生产中,它可以缩小和压缩。
希望这有帮助。
答案 1 :(得分:3)
我会尝试为你回答其中的一些问题。你真的只想要每页1个文件准备好的电话,但是如果你有倍数并不重要。它们中包含的内容将是DOM加载到浏览器后执行的代码。 Rails不会对javascript做任何神奇的事情,它会和你在文件中写的一样。 Rails不会以一种时髦的方式编译javascript代码,对于生产环境,它可能会缩小它,但实际代码将保持大致相同。这是由浏览器执行的 - 而不是服务器。
您没有实例化2个实例,因为jQuery只加载一次,然后被引用。 $(document).ready()调用本质上只是一个函数,仅此而已。
特定于模型的jquery文件可以在rails应用程序中与Ajax结合使用。所以你可以拥有像'create.js.erb'这样的文件,它实际上是一个你可以将rails操作传递到的javascript文件。如果你想在创建/删除帖子之后触发一些特定的代码,那么你可以使用这样的文件来做到这一点,你只需要在你的rails控制器中响应javascript - 但是你的意思是看看你上面的问题。
要记住的主要事情是jquery只是javascript和javascript由浏览器运行 - 在前端没有任何动态集成,总是在客户端运行,而jquery主要用于DOM操作。
希望这会清除一些东西!