我的rails应用程序(全部为2.3.5)使用内联javascript,rjs,prototype和jquery的全部组合。让我们称之为学习或成长的痛苦。最近我越来越迷恋不引人注目的javascript。它使你的html干净,就像css清理它一样。
但我见过的大多数例子都是小例子,他们把所有javascript(jquery)放在application.js中
现在我有一个非常大的应用程序,我正在考虑如何构建我的js。我喜欢某种方式,我的脚本仍然靠近视图,所以我在想像
orders.html.erb
orders.js
其中orders.js包含特定于该视图的不显眼的javascript。但也许那只是我过于保守:)
我已经阅读了Yehuda Katz关于这个问题here和here的一些帖子,他解决了这个问题。它将遍历您的js文件,并仅加载与您的视图相关的文件。但是,我无法找到当前的实现。
所以我的问题:
content_for :script
或javascript_include_tag
来加载相关脚本。或者......?简而言之:在rails中进行不显眼的javascript的最佳做法是什么? :)
答案 0 :(得分:10)
我认为没有一种最佳做法,但我会告诉你我的所作所为。
我在public/javascripts/
目录中有一系列js文件,每个文件都有自己的用途。一些示例可以是utility.js
chat.js
shopping_basket.js
,依此类推。
我使用asset packager并为我的所有常用功能定义一个大胖集合,为管理员功能定义另一个胖集合。往返服务器的成本太高了。我基本上将第一页上的所有j加载到一个blob中(一般来说)
我允许页面内嵌基本的$(document).ready
挂钩,并保持它们非常短。
我的js文件需要访问的数据与页面内联呈现。 (通常在DOM中,有时作为变量 - 例如var xyz = 100
)
我通常会使用javascript关闭开发我的控制器(并确保它一切正常),然后我将其打开并在需要的地方撒上一些if request.xhr?
。
请记住,Rail 3.1引入了内置的最佳实践,请参阅:http://guides.rubyonrails.org/asset_pipeline.html - 就个人而言,我遇到了新管道的性能和配置问题,但是很多其他人已经取得了很大的成功。
答案 1 :(得分:3)
我最近记录了我的managing javascript in Ruby on Rails。我基本上将其分解为许多小的,精细的文件,每个文件都有一个合适的命名空间,然后将它们全部合并到一个文件中,以便使用asset_packager进行生产。
答案 2 :(得分:1)
我在尝试解决同样的问题时发现了这篇文章,但现有的解决方案都没有让我感到正确。我写了我的方法here.我喜欢Rails关于配置的约定,所以我希望使用相同的方法来包含仅适用于特定操作页面的Javascripts。如果不出意外,至少还有另一种方法可以添加到您的选项中。