react - coffeescript wikipedia
Ejecutar una clase de CoffeeScript en document.ready (4)
class Main
Pruebe la class @Main
en class @Main
lugar.
obv Main.test (); no funciona
Derecha. Debe ser new Main().test()
o Main::test()
.
¿coffeescript se ejecuta después de document.ready de todos modos?
Suponiendo que lo esté ejecutando a través de extras/coffee-script.js y utilizando jQuery, sí.
yo tengo
class Main
test:->
alert "yay!"
en coffeescript, y quiero ejecutarlo dentro de mi index.html
<script>
$(function(){
//and obv Main.test(); doesn''t work
});
</script>
Hay una nota de esto en el sitio web, dice que no funcionaría. Pero no pude encontrar cómo hacerlo funcionar. ¿algunas ideas? Necesito averiguar qué es el contenedor de cierre de coffeescript.
o se ejecuta coffeescript después de document.ready de todos modos?
¡Gracias!
Coffeescript envuelve su código en una llamada de función para que no pueda sobrescribir accidentalmente variables globales.
Si desea que las variables, funciones o clases sean globales (para que otros archivos puedan acceder a ellas), debe hacer que sean globales de forma explícita adjuntándolas a this
o window
.
# Stays within the function scope, so you can''t access it outside the file
myNotGlobalFunction -> return
# Attaches it to `this` aka `window`, so can be accessed globally
this.myGlobalFunction -> return
# A shortcut using @ which is an alias to `this.`
@myOtherGlobalFunction -> return
Esto compila a:
(function() {
myNotGlobalFunction(function() {
return;
});
this.myGlobalFunction(function() {
return;
});
this.myOtherGlobalFunction(function() {
return;
});
}).call(this);
Para ejecutar Coffeescript después de document.ready puedes usar jQuery así:
$ ->
# Put your function code here
init()
Lo que está haciendo es ejecutar jQuery (function () {callback ...}) como la tercera sección en este enlace: http://api.jquery.com/jQuery/
Lo que básicamente dice esto:
jQuery (devolución de llamada) Devuelve: jQuery Descripción: enlaza una función que se ejecutará cuando el DOM haya terminado de cargarse.
Declaro todas mis clases, etc. fuera del documento y luego invoco una función de inicio para que se ejecute en el momento adecuado.
¡Espero que eso ayude!
También me he encontrado con este problema antes. Primero que todo, ya que estás definiendo una clase, necesitas instanciarla. Entonces puedes llamar a tu función de test
en la instancia:
<script>
$(function(){
var an_instance_of_main = new Main();
an_instance_of_main.test();
});
</script>
Sin embargo, es posible que haya notado que el navegador no puede encontrar su clase Main
. Esto se debe a que cuando se compila CoffeeScript, envuelve una función de ejecución automática alrededor de la definición de su clase para evitar que Main
sea accesible globalmente. Si desea que sea accesible globalmente, puede prefijarlo con la ventana:
class window.Main
test:->
alert "yay!"
o asignarlo después de definirlo:
class Main
test:->
alert "yay!"
window.Main = Main