Salve a tutti.
Il mio problema e' questo.
Nella mia vista ho messo:
<%= text_field_tag('name','',:onfocus => "for (var i=1;i<99999;i++){};"
%>
E mi sarei aspettato di trovare nella pagina html questo utput:
<input name="name" onfocus="for (var i=1;i<99999;i++){};" />
invece ruby mi produce questo:
<input name="name" onfocus="for (var i=1;i<99999;i++){};" />
E ovviamente il codice javascript non funziona...
Ho anche provato ad usare il metodo html_safe:
<%= text_field_tag('name','',:onfocus => "for (var
i=1;i<99999;i++){};".html_safe %>
ma non cambia niente, continua a sostituirmi il segno di minore con <
Qualche idea?
Grazie a tutti
PS: rails 2.3.8 ruby 1.9.2
on 2012-11-14 18:31
on 2012-11-14 18:35
Devi usare escape_javascript() http://api.rubyonrails.org/classes/ActionView/Help... Da rails 3 in poi c'e' anche un alias j() non presente nella versione di rails che stai usando. -- Matteo Latini http://nebulab.it/ Il giorno 14/nov/2012, alle ore 18:31, Sam Pei <tex---74@libero.it> ha scritto:
on 2012-11-14 18:51
Matteo Latini wrote in post #1084445: > Devi usare escape_javascript() > > http://api.rubyonrails.org/classes/ActionView/Help... Mi dispiace, ma non funziona. Il risultato e' sempre uguale... Grazie lo stesso!
on 2012-11-14 20:01
2012/11/14 Sam Pei <tex---74@libero.it> > Matteo Latini wrote in post #1084445: > > Devi usare escape_javascript() > > > > http://api.rubyonrails.org/classes/ActionView/Help... > > Mi dispiace, ma non funziona. > > Il risultato e' sempre uguale... > mmhhh Il consiglio di Matteo mi sembra ottimo Cos non funziona ? <%= text_field_tag('name','',:onfocus => escape_javascript("for (var i=1;i<99999;i++){};") ) %> S.
on 2012-11-15 12:45
Sergio Berisso wrote in post #1084464: > Cos non funziona ? > > <%= text_field_tag('name','',:onfocus => escape_javascript("for (var > i=1;i<99999;i++){};") ) %> Si esatto, non funziona. Ma mi sta incuriosendo, perche' a voi funziona? Cmq ho risolto il problema, grazie alla risposta che mi hanno dato sulla sezione internazionale del forum (http://www.ruby-forum.com/topic/4407873) In pratica pare che text_field_tag abbia escape a true per default e quindi fa sempre l'escape. La soluzione e' di usare direttamente tag invece di text_field_tag, ed in effetti cosi funziona. Pero' una volta capito qual era il problema invece di cambiare tutti i miei text_field_tag ho preferito fare un javascript del tipo getElementById("name").onfocus = function (){for (var > i=1;i<99999;i++){};} non andando proprio a scpecificare :onfocus di text_field_tag. Poichè a questo punto il codice javascript sta in un javascript_tag e non in un text_field_tag il problema e' risolto.
on 2012-11-15 13:26
So che non on topic, ma ti consiglierei di fare l'attach degli eventi solo da JS, senza niente nel markup. pi pulito, pi facile da gestire, e non fai escape del JS :-) Inviato da iPhone Il giorno 15/nov/2012, alle ore 12:45, Sam Pei <tex---74@libero.it> ha scritto:
on 2012-11-15 15:36
2012/11/15 Sam Pei <tex---74@libero.it> > Si esatto, non funziona. Ma mi sta incuriosendo, perche' a voi funziona? > Francamente non ho provato (nemmeno su rails 3) E mi capita raramente di dover mettere inline JS (per fortuna :) Cmq ho risolto il problema, grazie alla risposta che mi hanno dato sulla > sezione internazionale del forum > (http://www.ruby-forum.com/topic/4407873) > > In pratica pare che text_field_tag abbia escape a true per default e > quindi fa sempre l'escape. > > La soluzione e' di usare direttamente tag invece di text_field_tag, ed > in effetti cosi funziona. > def text_field_tag(name, value = nil, options = {}) tag :input, { "type" => "text", "name" => name, "id" => sanitize_to_id(name), "value" => value } .update(options.stringify_keys) end Chiama tag (se non sbaglio) Peccato non si possa passare un :escape => false S.
on 2012-11-15 15:46
Il giorno 15 novembre 2012 13:14, Luca Pradovera <luca.pradovera@gmail.com>ha scritto: > So che non on topic, ma ti consiglierei di fare l'attach degli eventi > solo da JS, senza niente nel markup. > pi pulito, pi facile da gestire, e non fai escape del JS :-) > Vedi 3d su http://www.ruby-forum.com/topic/4407873 :) Risposta di Sam Pei: >> P.S: Do not use inline JS > > You're right, but my problem is that I have ruby code in rhtml that > generates css and javascript codes. These codes are not static but > depend on ruby variables values. > > I can't figure out how to pass a ruby variable into an external css or js file... > > So I have to keep all the code in one big (sigh!) rhtml... Forse quel codice avrebbe bisogno di (tanto) refactoring. Se il progetto lo permettesse :) S.
on 2012-11-15 17:08
Sergio Berisso wrote in post #1084574: [cut] >> I can't figure out how to pass a ruby variable into an external css or js > file... >> >> So I have to keep all the code in one big (sigh!) rhtml... > > Forse quel codice avrebbe bisogno di (tanto) refactoring. > Se il progetto lo permettesse :) In effetti lo sto facenddo proprio ora. Praticamente sto riscrivendo il codice javascript facendo tante funzioni che accettano degli argomenti. Quando devo chiamare da rhtml se per esempio devo chiamare funzioneJava(Argomento) faccio <%= javascript_tag "funzioneJava(" + variabileRuby + ") %> il che fa veramente schifo, ma penso che sia il massimo che si possa fare In tal modo le variabili ruby diventano variabili java e io posso spostare tutto il resto del codice java nel file .js Ma, almeno quella linea, resta nel file rhtml. E ce ne deve stare una per ogni funzione...
on 2012-11-15 17:15
Sam Pei, scusa un secondo Hai particolari vincoli che ti impediscano di usare html5 e i data-* attributes? Eviti questo orribile crimine contro l'umanit che il javascript mischiato all'html e ne guadagni in flessibilit e manutenibilit 2012/11/15 Sam Pei <tex---74@libero.it>
on 2012-11-15 17:21
Il giorno 15/nov/2012, alle ore 17:08, Sam Pei <tex---74@libero.it> ha scritto: > <%= javascript_tag "funzioneJava(" + variabileRuby + ") %> > > il che fa veramente schifo, ma penso che sia il massimo che si possa > fare se la variabileRuby servita con la richiesta di una pagina, puoi anche pensare di inserirla in un attributo data-qualcosa in qualche tag :P HTML: <div id="qualcosa" data-rubyvar='<% ruby_var %>' JS: var js_var = $('div#qualcosa').data('rubyvar') se sono richieste AJAX, non hai bisogno di rjs, rispondi con json e prendi i dati della risposta > In tal modo le variabili ruby diventano variabili java e io posso > spostare tutto il resto del codice java nel file .js lo scopo chiaro, ma come vedi ci sono modi pi puliti per farlo. un buon link per approfondire unobtrusive JS: http://www.simonecarletti.com/blog/2010/06/unobtru... ciao, A. -- http://andreapavoni.com
on 2012-11-15 17:58
Il giorno 15 novembre 2012 17:21, Andrea Pavoni <apeacox@gmail.com> ha scritto: > > In tal modo le variabili ruby diventano variabili java e io posso > > spostare tutto il resto del codice java nel file .js > > lo scopo chiaro, ma come vedi ci sono modi pi puliti per farlo. un buon > link per approfondire unobtrusive JS: > > > http://www.simonecarletti.com/blog/2010/06/unobtru... Sam Pei dovresti riuscire (penso, non ho provato :) ad applicare queste tecniche anche in rails 2 http://andrewcox.org/post/507032751/rails-3-0-unob... Ed una volta che hai tutto il codice js isolato, volendo http://cjohansen.no/en/tdd/test_driven_development... http://cjohansen.no/en/tdd/test_driven_development... http://cjohansen.no/en/tdd http://tddjs.com/ http://cjohansen.no/en/javascript/test_driven_java... :-) S.
on 2012-11-15 20:31
Andrea Pavoni wrote in post #1084590: > se la variabileRuby servita con la richiesta di una pagina, puoi anche > pensare di inserirla in un attributo data-qualcosa in qualche tag :P > > HTML: > <div id="qualcosa" data-rubyvar='<% ruby_var %>' > > JS: > var js_var = $('div#qualcosa').data('rubyvar') Alla fine sto facendo cosi, anche se il tuo esempio non ha funzionato. Ho dovuto fare HTML: <div id="qualcosa" data-rubyvar='<%= ruby_var %>'> JS: var div=document.getElementById('qualcosa'); var js_var = div.getAttribute("data-rubyvar"); Cmq penso che utilizzando questa tecnica alla fine avro' tolto tutto il codice javascript da rhtml. A questo punto, scusate, visto che ci siamo, ma non e' che potrei fare qualche giochetto del genere anche con CSS? Infatti attualmente anche lo stile e' definito da delle variabili ruby e poiche' utilizzo inline l'attributo :style => posso ovviamente mandare queste variabili ruby allo stile. Ma volendo fare un file .css a parte come sto facendo con javascript, come accedo da questo file .css alle variabili ruby? Grazie a tutti per il vostro prezioso aiuto.
on 2012-11-16 10:30
Il giorno 15/nov/2012, alle ore 20:31, Sam Pei <tex---74@libero.it> ha scritto: > Alla fine sto facendo cosi, anche se il tuo esempio non ha funzionato. > Ho dovuto fare > > HTML: > <div id="qualcosa" data-rubyvar='<%= ruby_var %>'> > > JS: > var div=document.getElementById('qualcosa'); > var js_var = div.getAttribute("data-rubyvar"); argh! vero, ho usato jquery per selezionare l'elemento, oltre ad aver dimenticato il "=" nei tag di erb (<%%>) :P l'importante che hai risolto in modo pulito ;-) > A questo punto, scusate, visto che ci siamo, ma non e' che potrei fare > qualche giochetto del genere anche con CSS? > > Infatti attualmente anche lo stile e' definito da delle variabili ruby e > poiche' utilizzo inline l'attributo :style => posso ovviamente mandare > quete variabili ruby allo stile. sicuro di averne bisogno? con un po' di pulizia puoi avere un CSS statico, costituito da classi/id, evitando gli stili inline e variabili ruby ciao, A. -- http://andreapavoni.com
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.