rails最佳实践在哪里放置不引人注目的JavaScript

时间:2010-05-23 11:31:19

标签: javascript jquery ruby-on-rails ruby unobtrusive-javascript

我的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关于这个问题herehere的一些帖子,他解决了这个问题。它将遍历您的js文件,并仅加载与您的视图相关的文件。但是,我无法找到当前的实现。

所以我的问题:

  • 你如何最好地构建你不引人注目的javascript;管理你的代码,你如何确保从HTML中明显看出应该做什么。我想好的班级名称有很长的路要走:)
  • 你如何安排你的文件,加载它们?一些?您是否在视图中使用content_for :scriptjavascript_include_tag来加载相关脚本。或者......?
  • 你是否编写非常通用的函数(如删除),带参数(添加额外的属性?),还是编写非常具体的函数(DRY?)。我知道在Rails 3中有一个标准集,并且那里的一切都不引人注目。但是如何从Rails 2.3.5开始?

简而言之:在rails中进行不显眼的javascript的最佳做法是什么? :)

3 个答案:

答案 0 :(得分:10)

我认为没有一种最佳做法,但我会告诉你我的所作所为。

  1. 我在public/javascripts/目录中有一系列js文件,每个文件都有自己的用途。一些示例可以是utility.js chat.js shopping_basket.js,依此类推。

  2. 我使用asset packager并为我的所有常用功能定义一个大胖集合,为管理员功能定义另一个胖集合。往返服务器的成本太高了。我基本上将第一页上的所有j加载到一个blob中(一般来说)

  3. 我允许页面内嵌基本的$(document).ready挂钩,并保持它们非常短。

  4. 我的js文件需要访问的数据与页面内联呈现。 (通常在DOM中,有时作为变量 - 例如var xyz = 100

  5. 我通常会使用javascript关闭开发我的控制器(并确保它一切正常),然后我将其打开并在需要的地方撒上一些if request.xhr?


  6. 请记住,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。如果不出意外,至少还有另一种方法可以添加到您的选项中。