如何封装Coffeescript

时间:2012-06-13 16:23:46

标签: ruby-on-rails-3 coffeescript encapsulation

我不知道所有coffeescript编译器是否将其脚本包装在匿名函数中,但这就是我看到Rails所做的。如何禁用此封装?

我想在一个coffeescript文件中放入几个初始化函数,然后从页面上的<script>标记中调用其中一个(这样每个页面调用一个不同的初始化程序)。如果封装了初始化函数,则不能这样做。

Coffeescript初始化函数:

initializerA = -> console.log 'foo'
initializerB = -> console.log 'bar'

页面代码:

<script>$(document).ready(initializerA)</script>

系统:coffee-rails 3.2.1,Rails 3.2.3,Ruby 1.9.3

2 个答案:

答案 0 :(得分:7)

Coffeescript文档说,为了封装/安全,所有脚本都将包装在匿名函数中。要在全局范围内访问某些内容,请执行以下操作:

window.myvar = myvar

答案 1 :(得分:2)

您可以通过执行以下操作将多个文件放入单个文件中:

((Demo, $, undefined_) ->
  Demo.utils = Demo.utils or {}

  Demo.utils.bacon = (->
      alert("bacon called")
    )()

  Demo.utils.eggs = (->
      alert("eggs called")
    )()
) window.Demo = window.Demo or {}, jQuery

然后在你的页面中调用适当的方法:

Demo.utils.bacon();

对此模式的一个很好的解释可以是found here.