2011-06-24 16 views
55

quiero pasar dos funciones anónimas como argumentos para la libración de jQuery, así:¿Cómo pasar dos funciones anónimas como argumentos en CoffeScript?

$('element').hover(
    function() { 
    // do stuff on mouseover 
    }, 
    function() { 
    // do stuff on mouseout 
    } 
); 

Es fácil con sólo uno - hover -> - pero ¿cuál es la sintaxis correcta en CoffeeScript para dos? Intenté ...hover ->, ...hover(->..., etc. pero nada me da la estructura anterior.

+0

nombre de sus funciones anónimas. Hazlo ahora. usted no tiene nombres propios, así que llámelos 'f' y' g': 'f = (...) -> ...', 'g = ...'. luego '($ 'element') .hover f, g'. tan simple, tan expresivo. – flow

Respuesta

24

Coloque paréntesis alrededor de las funciones anónimas.

+0

Juro que hice esto - a lo que me refería con el vuelo estacionario (-> - pero lo hice de nuevo y funcionó. ¡Gracias! – glortho

+1

Sin embargo, debe tenerse en cuenta que tiene exactamente cero espacios en blanco entre el vuelo estacionario y la parantheses $ (@). hover()! = $ (@). hover() De lo contrario, la salida se envolvería en otro conjunto de parantheses. –

+1

No solo diga, muestre. –

52

Creo que el problema radica en el uso de comentarios de una sola línea //. Los comentarios de una línea incluidos en /* .. */ parecen funcionar bien. Aquí hay un ejemplo equivalente con algo más que un comentario.

$('element').hover(
    -> console.log("first") 
    -> console.log("second") 
) 

O con comentarios usando /* .. */.

$('element').hover(
    -> /* first */ 
    -> /* second */ 
) 

Puede probar estos ejemplos en la pestaña Try CoffeeScript. CoffeeScript agrega una instrucción return para devolver la última expresión de la función. Si quería funciones escueto que no hacen nada y no contienen un return al final, intente:

$('element').hover(
() -> 
() -> 
) 
// $('element').hover(function() {}, function() {}); 
+1

Si alguien tropezó con esto: cuidado de no insertar un espacio aquí: 'hover (', terminará con paréntesis adicionales. – punund

21

Otra forma es utilizar la barra invertida después de la función de llamadas, la coma debe tener una sangría correctamente.

$('element').hover \ 
    -> # do stuff on mouseover 
    , 
    -> # do stuff on mouseout 
+0

Gracias, \ es muy bueno para ir, mientras que en largas líneas de código , no necesitamos buscar y encontrar). Usar \ con, es realmente simple. Siento jquery mientras uso() nuevamente. –

8

Sin paréntesis o barra invertida:

f -> 
    0 
, -> 
    1 

de salida en 1.7.1:

f(function() { 
    return 0; 
}, function() { 
    return 1; 
}); 
Cuestiones relacionadas