2010-07-27 19 views
5

Sono nuovo di Rails e ho un problema piuttosto semplice con la chiamata di funzioni javascript da una vista. In Rails 2 vorrei ...Chiamare le funzioni javascript dalla vista in Rails 3

= javascript_tag "name(arguments)" 

dove la funzione javascript "nome" si trovava nel mio file application.js. Tuttavia, questo non sembra funzionare in Rails 3? O mi sta sfuggendo qualcosa? Ho cercato Google per un po 'di tempo senza trovare una risposta.

UPDATE:

OK, quindi ho guardato la fonte dei due modi diversi (utilizzando il javascript_tag e la Haml javascript filtro) come suggerito. E questo è molto strano perché la sorgente html sembra essere identica? A parte una differenza tra virgolette doppie e singole nel dichiarare il tipo di script.

PRIMO: utilizzando il javascript_tag che non funziona

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

Fonte ...

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

SECONDO: utilizzando il Haml javascript filtro e funziona

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

Fonte ...

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

Beh, credo che mi limiterò a bastone con il filtro Haml!

risposta

2

Si ha un errore di sintassi:

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

manca la parentesi di chiusura per la funzione number_interval.Penso che dovrebbe essere:

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

Wow ... non posso credere di averlo perso :) – kbjerring

0

Partenza sintassi proprio sul link text

e verificare se hai inserito le impostazioni predefinite JavaScript nel file.As questo lavoro per me in Rails 3 anche

+0

La sintassi è corretta e le impostazioni javascript sono incluse. Javascript_tag "alert ('All is good')" funziona anche, ma se per esempio metto "alert ('all is good')" in una sua funzione, inseriscilo in application.js, quindi prova a chiamare con javascript_tag no. Ma forse questo non è il modo di farlo. – kbjerring

+0

Bene, allora hai un errore nella tua funzione o sintassi. Pubblica il tuo codice funzione, esattamente come lo hai tu. –

2

Un mio amico mi ha segnalato il fatto che c'è un helper JavaScript in haml. A quanto pare, posso chiamare funzioni javascript utilizzando ...

:javascript 
    name_of_function(arguments) 

Questo funziona, ma ovviamente solo con Haml.

0

Domanda sciocca ma ... è application.js incluso nel layout?

Un'opzione da provare è codificare manualmente la chiamata alla funzione js nella vista in "reale" javascript, solo per vedere se funziona. es.

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

Quindi si può essere certi che non è colpa sua (o della sua mancanza).

+0

Sì, il file application.js è incluso. Suppongo che il: filtro javascript in haml faccia ciò che suggerisci, ... e funzioni. – kbjerring

+0

Ok ... quindi l'opzione successiva è visualizzare-source su cosa viene inserito nell'html quando si esegue quello che si sta rompendo ... e confrontarlo con l'origine del codice sorgente quando si utilizza la versione haml. se puoi copiare il codice sorgente pertinente nella tua domanda (sopra) possiamo disertarlo e vedere cosa sta succedendo. –

Problemi correlati