2010-05-23 36 views
30

我的rails应用程序(所有2.3.5)使用内嵌javascript,rjs,原型和jQuery的全部组合。让我们称之为学习或成长的痛苦。最近,我越来越迷恋不引人注意的JavaScript。它使你的html变得干净,就像css清理它一样。rails最佳实践在哪里放置不显眼javascript

但我所看到的大多数例子都是小例子,他们把所有的JavaScript(jQuery的)的application.js

里面现在我有一个相当大的应用程序,我想出办法来构建我的JS。我喜欢莫名其妙,我的脚本仍然接近的观点,所以我想这样

orders.html.erb 
orders.js 

其中orders.js包含特定于该视图中的不显眼的JavaScript。但也许这只是我太过于保守:)

我已经读过耶胡达卡茨关于这个问题herehere,他在那里解决这个问题的一些职位。它将通过你的js文件并只加载那些与你的视图相关的文件。但唉,我无法找到当前的实施。

所以我的问题:

  • 你怎么了最佳结构的不显眼的JavaScript;管理你的代码,你如何确保从html中明显知道应该做什么。我想很好的类名会走很长的路:)
  • 你如何安排你的文件,全部加载它们?一些?您在视图中使用content_for :scriptjavascript_include_tag来加载相关脚本。要么 ... ?
  • 你是否写了非常通用的函数(如删除),带参数(添加额外的属性?),还是编写非常具体的函数(DRY?)。我知道在Rails 3中有一个标准集合,并且在那里一切都不显眼。但是如何从Rails 2.3.5开始?

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

回答

10

我不认为有一个最佳实践,但我会让你知道我做了什么。

  1. 我有一个与在public/javascripts/目录自己目的的系列的每个js文件。一些示例可以是utility.jschat.jsshopping_basket.js等等。

  2. 我使用asset packager并为我的所有常规使用功能定义了一个大的胖集合,另一个用于仅限管理员功能。往返服务器的费用成本太高。我基本上包括所有的js在第一页加载缩小到一个blob(一般)

  3. 我允许基本$(document).ready钩子内联在页面,并保持他们真的很短。

  4. 我的js文件需要访问的数据与页面内联呈现。 (通常在DOM,有时瓦尔 - 如var xyz = 100。)

  5. 我通常会发展我用JavaScript控制器关闭(并确保所有的工作),然后我打开它,并洒一些if request.xhr?需要的地方。


请记住,铁3.1引入了一个内置的最佳实践,请参阅:http://guides.rubyonrails.org/asset_pipeline.html - 对个人而言我有性能和配置问题与新的管道,然而,许多人已经取得了巨大与它成功。

+0

这非常有趣。 完成。我仍然对其他人不得不说的感兴趣。 – nathanvda 2010-05-29 20:24:30

3

我最近记录了我是如何被managing javascript in Ruby on Rails。我基本上将事情分解成许多细小的文件,每个文件都有一个适当的命名空间,然后将它们全部合并到一个文件中,以便使用asset_packager进行生产。

+0

我喜欢如何自动加载一个.js文件,其名称与控制器的名称相同。这似乎是一个很好的开始,至少:) – nathanvda 2010-05-29 20:23:32

1

我在试图解决同样的问题时发现了这篇文章,但没有一个现有的解决方案让我觉得是正确的。我写了我的方法here.我喜欢Rails关于配置的约定,所以我想要同样的方法来包含仅适用于特定操作页面的Javascript。如果没有别的,至少有另一种方法来增加你的选择。

+0

我真的很喜欢你的建议,这是非常接近我真的很喜欢。我现在所做的就是将每个控制器的文件分成不同的js文件,但是随后在一个大的js中查找,因为它加载的速度更快(1个大js而不是单独的文件)。 – nathanvda 2010-10-18 19:09:44