【问题标题】:How to not encapsulate Coffeescript如何不封装 Coffeescript
【发布时间】:2012-06-16 15:59:34
【问题描述】:

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

我想将几个初始化函数放在一个咖啡脚本文件中,然后从页面上的<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

【问题讨论】:

  • @TrevorBurnham,确实类似。但是,我无法使用与该问题及其答案相关的搜索词找到该问题,因此这个问题一定有一些价值。
  • 这就是为什么重复项被关闭而不是被删除的原因:它允许他们指出一个更规范的问题。

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


【解决方案1】:

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

window.myvar = myvar

【讨论】:

    【解决方案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.

    【讨论】:

    • +1 了解详情。 (其他人的对我来说更容易消化。)
    猜你喜欢
    • 2011-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多