TLDR:
在 RoR 中,如何将多个 CoffeeScript 文件合并为一个 JS 文件,所有这些文件都在同一个匿名函数块下?
长版:
我有一些 CS 文件将为 RoR Web 应用程序的一部分加载。我想知道:用 CoffeeScripts 和 Ruby on Rail 3.1 的资产管道分离关注点的好方法是什么?
让我们使用以下作为示例代码:
main.js.coffee
window.MyApp = {} # to escape the CoffeeScript anonymous function block
# (I like the anonymous function block because it protects my other
MY_GLOBAL_SETTING = "world!"
$.click "#my_button" myApp.sayHello
# (I could use something like goog.bind here instead of using myApp. Any suggestions? Fat arrow?)
你好.js.coffee
MyApp.sayHello = sayHello () ->
doComplicatedStuff()
alert("Hello #{ MY_GLOBAL_SETTING }")
复杂的.js.coffee
doComplicatedStuff = () ->
# some really complicated algorithm, for example
true
我的资产目录结构如下:
assets/
application.js
application/
# javascript that gets used with the main application
secondary_page.js
secondary_page/
complicated.js.coffee
hello.js.coffee
main.js.coffee
二级.js
//= require secondary_page/main.js.coffee
//= require secondary_page/complicated.js.coffee
//= require secondary_page/hello.js.coffee
作为构建过程的一部分,我曾经将文件与 CoffeeScript 一起编译,但现在我想改用资产管道。我正在喝 RoR 3.1 酷爱!哈哈,说真的,资产管道看起来很棒。
我遇到的问题是 secondary.js 如下所示:
(function() {
// main.js
).call(this);
(function() {
// complicated.js
).call(this);
(function() {
// hello.js
).call(this);
这可以防止局部变量在整个代码之间共享。MY_GLOBAL_SETTING 和 doComplicatedStuff 不能用于 sayHello。
所以我该怎么做?如果不再次引入我自己的自定义编译步骤,我想不出一个好方法。