5

我正在使用 Rails 3.2.9。当我将 CoffeeScript 代码添加到目录.js.coffee中的文件时/app/assets/javascripts,我会在所有网页中获得生成的 JavaScript。问题是所有的 JavaScript 都包含在:

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

所以我定义的任何方法在我在其他文件中编写的任何其他 CoffeeScript 代码中都不可见。用 Rails 编写一组可重用的 CoffeeScript 类和方法的正确方法是什么?

4

2 回答 2

7

最简单的做法是命名所有类。如果您的应用程序被称为“应用程序”,那么在发生其他任何事情之前在您的初始化代码中:

// Set up the namespace.
window.app = { }

然后在您的所有.coffee文件中:

class app.Pancakes
    #...

然后,您将拥有一个全局命名空间,并通过该命名空间引用所有内容:

pancakes = new app.Pancakes

同样对于简单的功能:

app.where_is = (pancakes, house) -> ...

# And elsewhere...
x = app.where_is(...)

有多种方法可以设置和部分隐藏命名空间,但它们都是上述方法的变体,简单的命名空间与 Rails 资产管道很好地配合。

于 2012-11-15T07:21:04.107 回答
4

此外,您可以像这样在 coffeescript 文件中定义类:

class this.Person
  constructor: (attr = {}) ->
    ...

通过这种方式,定义被附加到全局命名空间。

于 2012-11-15T09:47:35.317 回答