2012-06-22 18 views
11

Questo è il codice ho attualmente:Interpola rubino if in Haml javascript blocco

:javascript 
    // do something 
- if current_user.role? :client 
    :javascript 
     //do something else 

E ', ovviamente, non molto pulita dato che sto ripetendo il: javascript filtro Haml. Vorrei evitarlo, ma non so come scrivere correttamente un'istruzione "if" di Ruby all'interno di un blocco HAML: javascript.

So come interpolare le variabili con # {}, ma come si fa lo stesso per intero se/per/etc. affermazioni?

risposta

-3

Questo è giusto.

L'altra opzione è che è possibile inserirla in un partial .js.erb e renderla dalla propria visualizzazione haml.

Poi si può solo fare

// do something 
<% if condition == true %> 
    // do something else 
<% end %> 
3

non l'ho provato, ma mi piacerebbe pensare che si possa fare

:javascript 
    // do something 
- if current_user.role? :client 
    ="//do something else" 

(come nel secondo esempio here.)

Per un po 'di javascript, puoi provare anche

:javascript 
    // do something 
    #{current_user.role? :client ? "//do something else" : ""} 
-1

ho compiuto questo tramite una chiamata = yield :foot_scripts nel mio layout, quindi poi:

= if condition 
    - content_for :foot_scripts do 
    - render :partial => "page_specific_javascript" 

nel mio punto di vista - in questo modo posso assicurare l'Javascript viene eseguito esattamente dove voglio che sia nel DOM (DOPO tutto il resto), e mantenerlo in un file separato, che è molto più pulito. Ottenere lo script dai tuoi file di visualizzazione? BENE!

2

faccio questo:

if(#{params[:param_to_check_for].blank? ? "true" : "false"}) 

Nel caso di cui sopra, la condizione è params[:param_to_check_for].blank?.

Rende il codice JavaScript sia come: if(false) o if(true)

+1

Perché vale una stringa , ma falso un booleano? – onebree

+0

@HunterStevens nessuna buona ragione ... probabilmente solo perché ha funzionato :) risolto ora. – Caleb

0

ho interpolato la variabile di Ruby/HAML in esplicita JS true o false per la condizione di JS come questo:

$("#cancel").click(function() { 
    if (#{ !!my_flag_variable }) 
    window.location.href = "./"; 
    else 
    $("#dialog").hide(); 
});