Coffeescript命名空间与不同的文件

时间:2014-06-04 19:28:08

标签: class coffeescript namespaces

考虑以下课程:

class A
  constructor: ->
    @nestedA = new NestedA()

  class NestedA
    constructor: ->

  @NestedA = NestedA

@A = A

class B
  constructor: ->
    @nestedB = new NestedB()

  class NestedB
    constructor: ->

  @NestedB = NestedB

@B = B

通过这种方式,全局命名空间中可以使用AB类,NestedANestedB只能通过A和{{0}}获得{1}}命名空间。我喜欢这种方法,这会导致单独的coffeescript文件变得相当大。因此,我想知道是否有办法将类(NestedA和NestedB)分成单独的coffeescript文件并仍然维护名称空间

2 个答案:

答案 0 :(得分:0)

您可以使用RequireJS将NestedA.coffee作为依赖项加载到A.coffee中(并为Bs执行相同操作)。然后使用RequireJS以相同的方式将A.coffee加载到主应用程序中。

Class A
  @NestedA = require('cs!NestedA)

这应该可行,但如果你还没有使用RequireJS,它可能会有点架构转变。

答案 1 :(得分:0)

我会这样做。这种方法与TypeScript非常相似,但这种模式在CoffeeScript中也很合适。

#a.coffee
A = do (A = A ? {})->

    class Foo
        constructor: ->
            @nestedFoo = new NestedFoo()

    class NestedFoo
        constructor ->
        greet: ->
            console.log('Hello World')

    #exports
    A.Foo = Foo
    A.NestedFoo = NestedFoo
    A

#somwhere-else.coffee

foo = new A.Foo()
foo.nestedFoo.greet() #yields 'Hello World'

这种方法的优点是,您可以从命名空间中添加任意数量的其他功能。