TLDR:Quelle est la meilleure façon de séparer les préoccupations de CoffeeScript et de Ruby on Rail?
Que pouvez-vous faire pour combiner plusieurs fichiers CoffeeScript dans un fichier JS, dans RoR, le tout sous le même bloc fonctionnel anonyme?
Version longue:
J'ai quelques fichiers CS qui seront chargés pour une partie d'une application web RoR. Je me demande: quelle est la bonne façon de séparer les préoccupations de CoffeeScripts et de Ruby on Rail 3.1?
Utilisons ce qui suit comme un exemple de code:
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 }")
complicated.js.coffee
doComplicatedStuff =() ->
# some really complicated algorithm, for example
true
J'ai mon actif répertoire structuré comme les suivants:
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
secondary.js
//= require secondary_page/main.js.coffee
//= require secondary_page/complicated.js.coffee
//= require secondary_page/hello.js.coffee
j'ai utilisé pour compiler les fichiers ainsi que CoffeeScript dans le cadre du processus de construction , mais maintenant je veux utiliser le pipeline d'actifs à la place. Je bois le RoR 3.1 kool-aid! Haha, sérieusement, le pipeline d'actifs semble impressionnant.
Le problème que je rencontre est que secondary.js ressemble à ce qui suit:
(function() {
// main.js
).call(this);
(function() {
// complicated.js
).call(this);
(function() {
// hello.js
).call(this);
Cela empêche les variables locales d'être partagées entre l'ensemble du code . MY_GLOBAL_SETTING et doComplicatedStuff ne sont pas disponibles pour dire Bonjour.
Alors ... que dois-je faire? Je ne peux pas penser à un bon moyen sans introduire à nouveau ma propre étape de compilation personnalisée.