2012-11-28 35 views
3

我的Rails javascripts目录中有几个javascript(咖啡脚本)文件。代码在逻辑上分为不同的文件。但是,每个文件都以$(document).ready ->开头,一些文件共享通用帮助程序功能。在Rails应用程序中整理JavaScript

什么是分解出辅助功能的最佳方法?我是否应该将它们全部放在之前包含在application.js中的其他文件中?

而且,是很正常的划分代码矿的方法是,在每一个页面呢$(document).ready ->?这是不是说我的所有代码都是在每一页上调用的,不管它是否相关?这个组织有没有其他的选择?

我不知道,如果这个问题是特定于Rails的或相关的JavaScript和jQuery一般。

回答

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是这样做的话,那可能是一个好方法。他们的确在考虑这些事情。不要修复什么作品:-)

+0

出于某种原因,我遇到的问题得到公共文件的工作。依赖于它的文件无法看到常用功能。我在清单中依赖它的文件上方有公用文件。 // = require_tree。在底部。有任何想法吗? 所以我有: // =需要共同 // =需要依赖 // = require_tree。 – mushroom

+2

这是因为CoffeeScript编译器在函数中封装了每个完整文件,以便变量不会泄漏。如果你想要一个函数或变量是全局可访问的,你需要明确地导出它。在浏览器中最简单的方法是'window.foo = blah'。请参阅[此问题](http://stackoverflow.com/questions/5211638/pattern-for-coffeescript-modules)以获取更多信息。 –

+0

@JonathanTran是的,这是问题所在。谢谢。 – mushroom