2011-04-17 5 views
19

¿Cómo puedo omitir las envolturas de cierre automático que ocultan mis variables del alcance global?Deshacerse de la envoltura de cierre de CoffeeScript

(function() { 
    // my compiled code 
}).call(this); 

simplemente jugando con CoffeeScript + SproutCore, y por supuesto, preferiría dejar la cuestión como es: en este caso no hay necesidad de proteger cualquier cosa de sobreescritura.

Sé que puedo usar @ o this. en la declaración, pero eso no es muy elegante.

+0

Debería _realmente_ evitar hacer eso. No desea que sus variables locales se filtren en el ámbito global. – shesek

+5

@shesek ¿quizás está usando un paquete? que ya envuelve todo en un ámbito? ¿O usa RequireJS? Creo que el ámbito del contenedor debería ser opcional. – benqus

+0

@benqus: de acuerdo, o utilizo mi propio contenedor o combino varios archivos en un contenedor grande utilizando un gruñido, por ejemplo. De lo contrario, si lo encuentras feo o algo así, no debes omitirlo. –

Respuesta

42

Solución rápida y sucia: utilice la consola indicador -b (vacío). Advertencia: ¡Los gatitos morirán si lo haces!

Solución limpia: No hagas eso.

Usage: coffee [options] path/to/script.coffee 

    -c, --compile  compile to JavaScript and save as .js files 
    -i, --interactive run an interactive CoffeeScript REPL 
    -o, --output  set the directory for compiled JavaScript 
    -j, --join   concatenate the scripts before compiling 
    -w, --watch  watch scripts for changes, and recompile 
    -p, --print  print the compiled JavaScript to stdout 
    -l, --lint   pipe the compiled JavaScript through JSLint 
    -s, --stdio  listen for and compile scripts over stdio 
    -e, --eval   compile a string from the command line 
    -r, --require  require a library before executing your script 
    -b, --bare   compile without the top-level function wrapper 
    -t, --tokens  print the tokens that the lexer produces 
    -n, --nodes  print the parse tree that Jison produces 
     --nodejs  pass options through to the "node" binary 
    -v, --version  display CoffeeScript version 
    -h, --help   display this help message 
+11

Esta respuesta es correcta, pero vale la pena señalar que '-b' está muy desaconsejado en casi todos los casos. [Aquí está el por qué] (http://stackoverflow.com/questions/5211638/pattern-for-coffeescript-modules/5212449#5212449). –

+0

¡Gracias! de alguna manera me lo perdí ... – Zeppelin

+0

¿Cómo harías esto desde sinatra de poner café -b – coool

7

utilicé otra opción que era para unir mis variables globales al objeto global en el ámbito de mi función. Adjunté el mío a la 'ventana'. Esto mantiene su JavaScript encapsulado y solo expone la variable que necesita en el alcance global.

+0

En el servidor, use 'this' en su lugar. Mejor aún, use '@' para ambos. –