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