2010-07-27 42 views
5

Soy nuevo en Rails y tengo un problema bastante simple al llamar a funciones de JavaScript desde una vista. En Rails 2 lo haría ...Llamar a las funciones de JavaScript desde la vista en Rails 3

= javascript_tag "name(arguments)" 

donde la función de "nombre" Javascript se encuentra en mi archivo application.js. Sin embargo, esto no parece funcionar en Rails 3? ¿O me estoy perdiendo algo? He estado buscando en Google por un tiempo sin encontrar una respuesta.

ACTUALIZACIÓN:

OK, por lo que se veía en el origen de las dos formas diferentes (utilizando el javascript_tag y la haml Javascript filtro) como se sugiere. Y esto es muy extraño porque la fuente html parece ser idéntica? Además de una diferencia en comillas dobles e individuales al declarar el tipo de script.

PRIMERO: mediante el cual javascript_tag no funciona

= javascript_tag "number_interval(#{fact.current_value}, #{fact.growth_per_second}, #{fact.decimal_number}, '#{dom_id(fact, "number")}'" 

Fuente ...

<div id='number_number_interval_727'>loading</div> 
<script type="text/javascript"> 
//<![CDATA[ 
number_interval(6952596670.36814, 2.33002440293917, 0, 'number_number_interval_727' 
//]]> 
</script> 

SEGUNDO: utilizando el filtro de haml Javascript y funciona

:javascript 
    number_interval(#{fact.current_value}, #{fact.growth_per_second}, #{fact.decimal_number}, '#{dom_id(fact, "number")}') 

Fuente ...

<div id='number_number_interval_727'>loading</div> 
<script type='text/javascript'> 
//<![CDATA[ 
number_interval(6952596917.02179, 2.33002440293917, 0, 'number_number_interval_727') 
//]]> 
</script> 

Bueno, supongo que voy a seguir con el filtro de haml!

Respuesta

2

Usted tiene un error de sintaxis:

= javascript_tag "number_interval(#{fact.current_value}, #{fact.growth_per_second}, #{fact.decimal_number}, '#{dom_id(fact, "number")}'" 

falta el paréntesis de cierre para la función number_interval.Creo que debería ser:

= javascript_tag "number_interval(#{fact.current_value}, #{fact.growth_per_second}, #{fact.decimal_number}, '#{dom_id(fact, "number")}')" 
+0

Wow ... no puedo creer que me haya perdido esa :) – kbjerring

0

Mira la sintaxis correcta en link text

y Check si ha incluido los valores por defecto Javascript en su file.As este trabajo para mí en Rails 3 también

+0

La sintaxis es correcta y se incluyen los valores por defecto de javascript. El javascript_tag "alert ('All is good')" también funciona, pero si puse, por ejemplo, "alert ('all is good')" en una función propia, colóquelo en application.js, y luego intente llamar con javascript_tag no. Pero tal vez esta no es la manera de hacerlo. – kbjerring

+0

Bueno, entonces tiene un error en su función o sintaxis. Publica tu código de función, exactamente como lo tienes. –

2

Un amigo mío me señaló el hecho de que hay un asistente de Javascript en haml. Aparentemente, puedo llamar a funciones de JavaScript usando ...

:javascript 
    name_of_function(arguments) 

Esto funciona, pero por supuesto solo con haml.

0

Pregunta tonta pero ... ¿se incluye application.js en su diseño?

Una opción para intentar es codificar a mano el js function-call en su vista en javascript "real", solo para ver si funciona. por ejemplo

<script type="text/javascript"> 
    name(arguments) 
</script> 

entonces usted puede estar seguro que no es el mismo (o su ausencia) js en falta.

+0

Sí, se incluye la aplicación.js. Supongo que el filtro javascript en haml hace lo que sugieres ... y funciona. – kbjerring

+0

Ok ... entonces la siguiente opción es ver-fuente en lo que se pone en el html cuando haces el que está quebrando ... y comparar eso con lo que está en la fuente cuando usas la versión haml. si puede copiar el código fuente relevante en su pregunta (arriba) podemos diseccionarlo y ver qué está pasando. –

Cuestiones relacionadas