Я нахожусь на ранних стадиях попытки написать какой-нибудь разумный 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()'
Не похоже, что Sprockets могут это сделать.
Есть ли разумный способ требовать, чтобы мои файлы CoffeeScript в нужном месте в моих файлах-контейнерах? Или другой подход к написанию модульного кода, разделенного на отдельные файлы, с использованием CoffeeScript, Sprockets и Rails 3.1?