如何不封装 Coffeescript

Posted

技术标签:

【中文标题】如何不封装 Coffeescript【英文标题】:How to not encapsulate 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

【问题讨论】:

How can I use option "--bare" in Rails 3.1 for CoffeeScript? 的可能重复项 @TrevorBurnham,确实类似。但是,我无法使用与该问题及其答案相关的搜索词找到该问题,因此这个问题一定有一些价值。 这就是为什么重复项被关闭而不是被删除的原因:它允许他们指出一个更规范的问题。 【参考方案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 了解详情。 (其他人的对我来说更容易消化。)

以上是关于如何不封装 Coffeescript的主要内容,如果未能解决你的问题,请参考以下文章

如何在不破坏封装的情况下返回对 RefCell 内某些内容的引用?

Golang如何体现面向对象三大特征之封装?

如何封装springboot的starter

如何把一个函数封装成一个类

GRE OVER IPSEC的数据包的IP地址是如何封装的

如何实现H.264的RTP封装及传输?