如何将CoffeeScript文件与视图相关联?

时间:2011-05-26 03:00:17

标签: coffeescript ruby-on-rails-3.1

刚安装了rails 3.1 rc1,我正试图用新的资产管道来管理javascript的最佳方法 默认情况下,所有coffeescript都编译成一个application.js文件,这是一件好事。

每个单独的咖啡脚本文件都附加到js文件并包装在一个匿名函数中,该函数通过调用方法执行 一个常见的场景是使用一些jquery将各种表单转换为ajax表单,更新UI等...

这些脚本中的许多都是特定于控制器或动作的,我试图理解“常规”方式来处理这个问题, 因为一切都包含在一个匿名函数中,我怎么才执行just 特定控制器/操作的代码,默认情况下正在执行所有匿名函数

我确实玩过一些hacks,我将控制器和动作名称加载到js变量然后进入 coffeescript检查那些有条件运行的代码,我不太喜欢那个

我最初的想法是每个咖啡文件都包含一个js名称空间/对象,我会从视图中调用特定的, 使用default_bare = true配置

来加速

请参阅How can I use option "--bare" in Rails 3.1 for CoffeeScript?

修改

再看一下:看起来这可能是正确的做法 - "Can't find variable" error with Rails 3.1 and Coffeescript

2 个答案:

答案 0 :(得分:22)

有两种常见的方法:

  1. 使行为以特定元素的存在为条件。例如,运行注册表的代码应该以

    之类的方式开头

    if $('#signup').length > 0

  2. 使行为以body元素上的类为条件。您可以使用ERB设置主体类。这通常也适用于样式表。代码类似于

    if $('body').hasClass 'user'

答案 1 :(得分:0)

gistyle是一个简单的gem,可以帮助您运行特定于操作的JavaScript代码。

通过遵循其设置,您可以在body元素中设置一些数据属性,表示当前控制器和操作名称。然后它只会在加载相应的视图时调用该动作。