2010-07-27 3 views
5

Je suis nouveau sur Rails et j'ai un problème assez simple avec l'appel de fonctions javascript à partir d'une vue. Dans Rails 2 Je ferais ...Appel des fonctions javascript à partir de view in Rails 3

= javascript_tag "name(arguments)" 

où la fonction javascript « nom » a été localisé dans mon dossier application.js. Cependant, cela ne semble pas fonctionner dans Rails 3? Ou est-ce que je manque quelque chose? J'ai cherché Google pendant un certain temps sans trouver de réponse.

MISE À JOUR:

OK, alors j'ai regardé à la source des deux façons différentes (en utilisant le javascript_tag et le filtre javascript haml) comme l'a suggéré. Et c'est très étrange parce que la source html semble être identique? Mis à part une différence dans les guillemets doubles et simples dans la déclaration du type de script.

PREMIER: utilisant le javascript_tag qui ne fonctionne pas

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

... Source

<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> 

DEUXIÈME: utilisant le haml javascript filtre et fonctionne

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

... Source

<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> 

Eh bien, je suppose que je vais juste coller avec le filtre haml!

Répondre

2

Vous avez une erreur de syntaxe:

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

manque la parenthèse fermante pour la fonction number_interval.Je pense que cela devrait être:

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

Wow ... ne peux pas croire que j'ai manqué celui-là :) – kbjerring

0

Vérifiez la syntaxe à droite sur link text

et vérifiez si vous avez inclus les valeurs par défaut javascript dans votre file.As ce travail pour moi RAILS 3 aussi

+0

La syntaxe est correcte et les valeurs par défaut de javascript sont incluses. Le javascript_tag "alert ('All is good')" fonctionne également, mais si je mets par exemple "alert ('all is good')" dans une fonction qui lui est propre, placez-le dans application.js, puis essayez d'appeler avec javascript_tag ce n'est pas le cas. Mais peut-être que ce n'est pas la façon de le faire. – kbjerring

+0

Eh bien, vous avez une erreur dans votre fonction ou votre syntaxe. Postez votre code de fonction, exactement comme vous l'avez. –

2

Un de mes amis m'a fait remarquer au fait qu'il y a une aide javascript dans haml. Apparemment, je peux appeler des fonctions javascript en utilisant ...

:javascript 
    name_of_function(arguments) 

Cela fonctionne, mais bien sûr seulement avec haml.

0

Question stupide mais ... application.js est-elle incluse dans votre mise en page?

Une option à essayer est de coder à la main l'appel de fonction js dans votre vue en javascript "réel" - juste pour voir si cela fonctionne. par exemple

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

Ensuite, vous pouvez être sûr que ce ne sont pas les js lui-même (ou l'absence de celui-ci) en faute.

+0

Oui, le fichier application.js est inclus. Je suppose que le filtre: javascript dans haml fait ce que vous suggérez, ... et cela fonctionne. – kbjerring

+0

Ok ... donc l'option suivante est de regarder sur ce qui est mis dans le HTML quand vous faites celui qui se casse ... et comparez cela à ce qui est dans la source lorsque vous utilisez la version haml. Si vous pouvez copier le code source pertinent dans votre question (ci-dessus), nous pouvons le détecter et voir ce qui se passe. –

Questions connexes