ruby-on-rails – 如何在Rails 3.1中使用Sprockets编写DRY,模块化咖啡?

我正在尝试写一些明智的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分割成单独文件的模块化代码

解决方法

我有一个我在代码中使用的模块解决方案.

我定义了我的模块,如下所示

@module "foo",->
    @module "bar",->
        class @Amazing
            toString: "ain't it"

惊人的可用作为

foo.bar.Amazing

执行@module帮助器是

window.module = (name,fn)->
  if not @[name]?
    this[name] = {}
  if not @[name].module?
    @[name].module = window.module
  fn.apply(this[name],[])

这是在咖啡店网站上写的.

https://github.com/jashkenas/coffee-script/wiki/Easy-modules-with-coffeescript

相关文章

以下代码导致我的问题: class Foo def initialize(n=0) @n = n end attr_accessor :n d...
这是我的spec文件,当为上下文添加测试“而不是可单独更新用户余额”时,我得到以下错误. require 's...
我有一个拦截器:DevelopmentMailInterceptor和一个启动拦截器的inititializer setup_mail.rb. 但我想将...
例如,如果我有YAML文件 en: questions: new: 'New Question' other: recent: ...
我听说在RSpec中避免它,let,let !,指定,之前和主题是最佳做法. 关于让,让!之前,如果不使用这些,我该如...
我在Rails中使用MongoDB和mongo_mapper gem,项目足够大.有什么办法可以将数据从Mongoid迁移到 Postgres...