Я нахожусь на ранних стадиях попыток написать какой-нибудь разумный Javascript. Я хочу использовать пространство имен для всего сущности под именем моего приложения, чтобы избежать глобальных ограничений, но все же дать мне возможность доступа к функциям, объявленным повсеместно. Однако я не хочу быть супер многословным в своих определениях функций.
Мой идеальный CoffeeScript будет выглядеть примерно так:
class @MyApp
@myClassMethod = ->
console.log 'This is MyApp.myClassMethod()'
class @Module1
@moduleMethod = ->
console.log 'This is MyApp.Module1.moduleMethod()'
Вы получаете картину. Таким образом, мне не нужно писать MyApp.Module.submoduleMethod = ->
каждый раз, когда я хочу правильно определить функцию пространства имен - используя @
и определяя вещи в мое определение класса делает вещи красивыми и короткими.
Все идет хорошо, пока я не хочу разделить свою функциональность на несколько файлов CoffeeScript. Тогда я действительно хочу что-то вроде этого:
// application.js
class @MyApp
//= require 'module1'
//= require 'module2'
// module1.js
class @Module1
@moduleMethod = ->
console.log 'This is STILL MyApp.Module1.moduleMethod()'
Не похоже, что Звездочки могут это сделать.
Есть ли разумный способ требовать, чтобы мои файлы CoffeeScript находились в нужном месте в моих файлах-контейнерах? Или другой подход к написанию модульного кода, который разделен на отдельные файлы с использованием CoffeeScript, Sprockets и Rails 3.1?