0

我已经对此进行了一些搜索,但找不到信息。我正在 sinatra 中构建一个应用程序,并使用 coffeescript 模板引擎。默认情况下,编译后的代码是这样包装的:

(function() {
  // code
}).call(this);

我想使用 --bare 标志删除它,以便不同的文件可以访问我正在定义的类等。我意识到包含更多内容有助于防止变量冲突等,但我正在研究两个主要部分。一是业务逻辑,以及类结构中的数据排列。另一个是使用 raphaeljs 的视图功能。我宁愿将这两部分保存在单独的文件中。由于这样包装的两个文件无法访问数据,因此显然无法正常工作。但是,如果您能想到比使用 --bare 选项更好的解决方案,我会全力以赴。

4

2 回答 2

2

裸编译只是一种不好的做法。每个文件都应仅将与应用程序其余部分相关的公共对象导出到全局范围。

# foo.coffee
class Foo
  constructor: (@abc) ->

privateVar = 123

window.Foo = Foo # export

Foo现在全球可用。现在,如果该模式不实用,也许您应该重新考虑一下您的结构。如果你必须导出太多东西,你可以更好地嵌套和命名空间,这样可以通过更少的全局变量暴露更多的数据。

于 2012-04-13T21:10:28.293 回答
1

我支持亚历克斯的回答,但如果你绝对必须这样做,我相信我对 Rails 3.1 相同问题的回答也适用于此处:

Tilt::CoffeeScriptTemplate.default_bare = true

在你的应用程序的某个地方。

于 2012-04-14T01:55:00.077 回答