我正在尝试编写一些合理的 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?