I found this snippet on the Coffeescript FAQ for creating simplistic namespaces ..
# Code:
#
namespace = (target, name, block) ->
[target, name, block] = [(if typeof exports isnt 'undefined' then exports else window), arguments...] if arguments.length < 3
top = target
target = target[item] or= {} for item in name.split '.'
block target, top
# Usage:
#
namespace 'Hello.World', (exports) ->
# `exports` is where you attach namespace members
exports.hi = -> console.log 'Hi World!'
namespace 'Say.Hello', (exports, top) ->
# `top` is a reference to the main namespace
exports.fn = -> top.Hello.World.hi()
Say.Hello.fn() # prints 'Hi World!'
That is all well and good, but I am having a great deal of trouble doing this with the class
keyword. Such that ..
namespace 'Project.Something', (exports) ->
exports.something = -> class something
// .. code here
exports.somethingElse = class somethingElse extends something
can anyone shed some light on the syntax that would accomplish this?
How about using something like this?
Even better, the class syntax allows for the name to actually be in the form of a member, so you can actually just do:
Full fiddle here: http://jsfiddle.net/7Efgd/1/
The trick is to create the class first
Then somewhere near the end of the file export all the classes than need to be exposed.
Later on you can use the classes as so: