考虑以下课程:
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
通过这种方式,全局命名空间中可以使用A
和B
类,NestedA
和NestedB
只能通过A
和{{0}}获得{1}}命名空间。我喜欢这种方法,但这会导致单独的coffeescript文件变得相当大。因此,我想知道是否有办法将类(NestedA和NestedB)分成单独的coffeescript文件并仍然维护名称空间?
答案 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'
这种方法的优点是,您可以从命名空间中添加任意数量的其他功能。