[Rails] i file js.erb visualizzano il codice invece di eseguirlo

Ciao a tutti,
Approfitto della vostra pazienza per sottoporvi un problemino che ho con
Rails 3.0.9 + jQuery

In sostanza non riesco a far funzionare i file jr.erb
Sto utilizzando AJAX per inviare un modulo e quando ottengo degli errori
compongo un Builder::XmlMarkup per passarlo al file js.erb

    format.js {
      xm = Builder::XmlMarkup.new

       @pay_check.errors.full_messages.each do |msg|
        xm.span {
                 xm << msg
                 xm.br
        }
       end
       @str = xm.target!
    }

Il file jr.erb contiene il codice JS per visualizzarlo nel div degli
errori:

$(’#error_explanation’).html(’<%= @str %>’);

Nel div però ottengo la visualizzazione del codice, non l’esecuzione,
ottengo cioè:

$(’#error_explanation’).html('Errore … ');

Il 26 ottobre 2011 23:19, Nimbuzz 77 [email protected] ha scritto:

Ciao a tutti,
In sostanza non riesco a far funzionare i file jr.erb

Dove si trovano questi file erb?

$(‘#error_explanation’).html(‘<%= @str %>’);

Ti sconsiglio questo approccio. meglio non mischiare ruby e
javascript; conviene piuttosto scrivere javascript puro, e inserire
nel DOM i dati che vuoi passare al codice javascript, come attributi.
Se questo non fosse possibile, puoi sempre emettere un tag script
contenente un’unica invocazione di un metodo javascript.

Cerca “Unobtrusive Javascript”, troverai moltissimi esempi.

pietro

Hai provato a fare l’escape?
$(’#error_explanation’).html("<%= escape_javascript(@str)%>")

Dove si trovano questi file erb?

Il file js.erb si trova nella dir delle view insieme ai file html.erb

$(’#error_explanation’).html(’<%= @str %>’);

Ti sconsiglio questo approccio. meglio non mischiare ruby e
javascript; conviene piuttosto scrivere javascript puro, e inserire
nel DOM i dati che vuoi passare al codice javascript, come attributi.
Se questo non fosse possibile, puoi sempre emettere un tag script
contenente un’unica invocazione di un metodo javascript.

Cerca “Unobtrusive Javascript”, troverai moltissimi esempi.

In quel modo sono riuscito ad implementarlo ma volevo provare a
utilizzare questo approccio cioè a “mescolare” javascript e ruby (mi
sembra molto potente).

Ho utilizzato il render(:text => @str) e in un file javascript ho fatto
l’hook dell’ajax:success.

Nel’ultima versione di Rails (3.1.1) l’helper escape_javascript () è
diventato j()
quindi il nuovo codice sarà:

$(’#error_explanation’).html("<%=j(@str)%>")

Stavo giusto rispondendo che bisognautilizzare la funzione
escape_javascript()

Grazie.

j() è un alias di escape_javascript() che rimane disponibile
Ciao