I found this snippet on the Coffeescript FAQ for creating simplistic namespaces ..
# Code:
#
namespace = (target, name, block) ->
[target, name, block]
Even better, the class syntax allows for the name to actually be in the form of a member, so you can actually just do:
namespace 'Secrets', (exports) ->
class exports.Hello
constructor: ->
@message = "Secret Hello!"
a = new Secrets.Hello
console.log a.message
Full fiddle here: http://jsfiddle.net/7Efgd/1/
The trick is to create the class first
class MyFirstClass
myFunc: () ->
console.log 'works'
class MySecondClass
constructor: (@options = {}) ->
myFunc: () ->
console.log 'works too'
console.log @options
Then somewhere near the end of the file export all the classes than need to be exposed.
namespace "Project.Something", (exports) ->
exports.MyFirstClass = MyFirstClass
exports.MySecondClass = MySecondClass
Later on you can use the classes as so:
var firstClass = new Project.Something.MyFirstClass()
firstClass.myFunc()
var secondClass = new Project.Something.MySecondClass
someVar: 'Hello World!'
secondClass.myFunc()
How about using something like this?
module =
Hello: class Hello extends Backbone.Model
constructor: ->
@message = 'Hello'
Hello2: class Hello2 extends Backbone.View
constructor: ->
@message = 'Hello2'