17

刚刚安装了 rails 3.1 rc1 并且正在尝试使用新的资产管道来探索管理 javascript 的最佳方式默认情况下,所有的 coffeescript 都被编译成一个 application.js 文件,这是一件好事。

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

其中许多脚本将特定于控制器或动作,我正在尝试用“常规”方式来处理这个问题,因为一切都包装在一个匿名函数中,我如何只执行特定控制器/动作的代码,默认情况下,所有匿名函数都在执行

我确实玩过一些技巧,我将控制器和动作名称加载到js变量中,然后在coffeescript中检查它们以有条件地运行代码,我不太喜欢

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

请参阅如何在 Rails 3.1 中为 CoffeeScript 使用选项“--bare”?

编辑

环顾四周:这看起来可能是正确的方法 - Rails 3.1 和 Coffeescript 出现“找不到变量”错误

4

2 回答 2

23

有两种常见的方法:

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

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

  2. body使行为以元素上的类为条件。您可以使用 ERB 设置身体类别。这通常也是样式表所需要的。代码将类似于

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

于 2011-05-26T03:27:35.907 回答
0

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

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

于 2014-02-11T04:36:56.020 回答