使用 Rails 3.1,您将“页面特定”JavaScript 代码放在哪里?

2024-01-12

据我了解,所有 JavaScript 都会合并到 1 个文件中。 Rails 在添加时默认执行此操作//= require_tree .到你的底部application.js清单文件。

这听起来像是一个真正的救星,但我有点担心特定于页面的 JavaScript 代码。这段代码会在每个页面上执行吗?我最不想要的就是当我的所有对象只在一页上需要时,为每个页面实例化它们。

另外,代码是否也有可能发生冲突?

或者你放一个小script页面底部的标签只调用执行页面 JavaScript 代码的方法?

那么你不再需要 require.js 了吗?

Thanks

EDIT:我很欣赏所有的答案......但我认为他们并没有真正解决问题。其中一些是关于样式的,似乎没有关系……而另一些只是提到javascript_include_tag...我知道存在(显然...),但 Rails 3.1 的前进方式似乎是将所有 JavaScript 打包到 1 个文件中,而不是在每个页面的底部加载单独的 JavaScript。

我能想到的最好的解决方案是将某些功能包装在div标签有ids or classes.在 JavaScript 代码中,您只需检查是否id or class位于页面上,如果是,则运行与其关联的 JavaScript 代码。这样,如果动态元素不在页面上,JavaScript 代码就不会运行 - 即使它已包含在大量内容中application.js由链轮打包的文件。

我的上述解决方案的好处是,如果 100 个页面中的 8 个页面包含搜索框,则它将仅在这 8 个页面上运行。您也不必在网站的 8 个页面上包含相同的代码。事实上,您再也不需要在网站的任何地方添加手动脚本标签了。

我认为这就是我的问题的实际答案。


Asset Pipeline 文档建议如何执行特定于控制器的 JS:

例如,如果一个ProjectsController生成后,会出现一个新文件app/assets/javascripts/projects.js.coffee另一个在app/assets/stylesheets/projects.css.scss。您应该将控制器特有的任何 JavaScript 或 CSS 放入其各自的资源文件中,因为随后可以使用以下行仅为这些控制器加载这些文件:<%= javascript_include_tag params[:controller] %> or <%= stylesheet_link_tag params[:controller] %>.

链接至:asset_pipeline http://guides.rubyonrails.org/asset_pipeline.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Rails 3.1,您将“页面特定”JavaScript 代码放在哪里? 的相关文章

随机推荐