gpt4 book ai didi

ruby-on-rails - 您如何在 Rails 3.1 中使用 Sprockets 编写干燥的模块化 CoffeeScript ?

转载 作者:行者123 更新时间:2023-12-03 20:53:39 27 4
gpt4 key购买 nike

我正处于尝试编写一些明智的 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 编写模块化代码的另一种方法?

最佳答案

只需保持 module1.js 原样并使 application.js 看起来像这样:

//= require 'module1'

class @MyApp
...

@Module1 = Module1

这将起作用,因为您已经制作了 Module1一个全局变量(声明 class @Module1 等价于编写 @Module1 = class Module1 ,并且 @ 在该上下文中指向 window),并且在 class @MyApp 内 body , @指向类本身。

如果你想要 Module1仅是全局 MyApp 的属性附加后的类,您可以添加该行
delete window.Module1

关于ruby-on-rails - 您如何在 Rails 3.1 中使用 Sprockets 编写干燥的模块化 CoffeeScript ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6815957/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com