TLDR:
Что вы можете сделать, чтобы объединить несколько файлов CoffeeScript в один файл JS в RoR, все в одном и том же анонимном функциональном блоке?
Длинная версия:
У меня есть несколько CS-файлов, которые будут загружены для части веб-приложения RoR.Я задаюсь вопросом: как можно разделить проблемы с конвейером ресурсов 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?)
hello.js.coffee
MyApp.sayHello = sayHello () ->
doComplicatedStuff()
alert("Hello #{ MY_GLOBAL_SETTING }")
complex.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
primary.js
//= require secondary_page/main.js.coffee
//= require secondary_page/complicated.js.coffee
//= require secondary_page/hello.js.coffee
Я использовал для компиляции файлов вместе сCoffeeScript как часть процесса сборки, но теперь я хочу использовать вместо него конвейер ресурсов.Я пью RoL 3.1 KOOL-помощь!Ха-ха, если серьезно, конвейер ресурсов выглядит потрясающе.
Проблема, с которой я сталкиваюсь, заключается в том, что файл second.js выглядит следующим образом:
(function() {
// main.js
).call(this);
(function() {
// complicated.js
).call(this);
(function() {
// hello.js
).call(this);
Это предотвращает совместное использование локальных переменных между весь код.MY_GLOBAL_SETTING и doComplicatedStuff недоступны, чтобы сказать привет.
Итак ... что мне делать?Я не могу придумать хороший способ, не введя свой собственный шаг компиляции снова.