2011-12-30 8 views
8

Sto provando ad emettere alcuni j in linea su una pagina. Non voglio davvero aggiungerlo a nessun file JS poiché è così originale e utilizzabile una sola volta. Detto questo, sto usando haml e sto anche provando a usare content_for per posizionare il JS dopo che jquery è stato caricato dal layout.HAML Avere più linee durante l'utilizzo di content_for, per JavaScript

Il problema è che Haml non piace il testo multilinea che è rientrato (credo)

che sto cercando di fare quanto segue:

=content_for :javascript do 
    $(function(){ 
    $("#sell_tickets_here").live("vclick",function(){ 
     if($(this).is("checked")) 
     $("#tickets_here").display("inline"); 
     else 
     $("#tickets_here").display("none"); 
    }); 
    }); 

Nel mio layout ho:

= yield(:javascript) 

Che funziona effettivamente se ho solo 1 riga dopo l'istruzione content_for.

risposta

15

la sintassi corretta sarebbe:

- content_for :javascript do 
    :javascript 
    $(function(){ 
     $("#sell_tickets_here").live("vclick",function(){ 
     if($(this).is("checked")) 
      $("#tickets_here").display("inline"); 
     else 
      $("#tickets_here").display("none"); 
     }); 
    }); 

Avviso cruscotto contro il segno di uguale e il :javascriptHAML filter. HAML funziona bene con multi-linea fintanto che è rientrato in 2-spazio.

E poi nell'altra parte della vostra vista:

= content_for(:javascript) 
+1

Grazie questo ha funzionato. L'unica cosa da notare è che se si dispone di contenuti per javascript provenienti da più pagine, verrà inserito un tag script per ciascuno di essi. l'haml: javascript esegue il wrapping

0

Questo si chiama escaping, e in questo caso si sfugge, ergh, rientro:

=content_for :javascript do /$(function(){ / $("#sell_tickets_here").live("vclick",function(){ / if($(this).is("checked")) / $("#tickets_here").display("inline"); / else / $("#tickets_here").display("none"); / }); /});