在Rails应用程序中组织javascript

时间:2012-11-28 02:03:34

标签: javascript jquery ruby-on-rails coffeescript

我的Rails javascripts目录中有几个javascript(咖啡脚本)文件。代码在逻辑上分为不同的文件。但是,每个文件都以$(document).ready ->开头,一些文件共享公共帮助函数。

分解辅助函数的最佳方法是什么?我应该把它们全部放在application.js中早先包含的其他文件中吗?

此外,将代码按照我的方式进行划分是正常的,每个页面都是$(document).ready ->?这是否意味着我的所有代码都会在每个页面上调用,无论它是否相关?这个组织有替代方案吗?

我不确定这个问题是否特定于Rails或者与javascript和jQuery有关。

1 个答案:

答案 0 :(得分:2)

我认为这是一个Rails问题,也是一个很好的问题。

Rails中的常规范例,其中“全局”内容进入application.*与资产管道有点混乱,因为application.js实际上充当了清单,而不是普通文件。当然,您可以在那里添加内容,甚至可以为您的公共代码创建application.js.coffee。我决定创建一个名为common.js.coffee的文件(在另一种情况下shared.js.coffee),在我的例子中,它由require_tree .指令自动处理。

(基于来自@ jonathan-tran的评论进行更新)在某些情况下,您可能只需要为所有页面准备好文档调用的方法 - 例如,我使用它来使任何视图中的任何字段都可以使用日期选择器。如果您想要可调用的方法(实际上是全局函数),则需要将coffeescript函数导出到变量,例如通过附加到window对象。您可以在共享文件中执行这两项操作。

确实如果你使用生成器,你将最终得到每个控制器的文件,如果在编译资产时没有专门的代码导致一系列冗余的$(document).ready ->语句。所以只要摆脱你不使用的那些。但是遵循特定于页面的分离功能的模式对我来说很有意义并且运作良好 - 我知道在哪里寻找东西,并且随着项目的增长,这是值得的。

我用Rails学到的另一个规则是:顺其自然。如果这就是Rails的表现,那可能是一个好方法。他们确实考虑过这些事情。不要修复有效的方法: - )