2012-06-22 10 views
11

Dies ist der Code ich derzeit haben:interpolieren Rubin if-Anweisung in haml JavaScript-Block

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

Es ist natürlich nicht sehr sauber, da ich das bin zu wiederholen: Javascript-haml Filter. Ich möchte das vermeiden, aber ich weiß nicht, wie man eine Ruby-Anweisung "if" in einen HAML: JavaScript-Block schreibt.

Ich weiß, wie man Variablen mit # {} interpoliert, aber wie machen Sie das gleiche für ganze if/für/etc. Aussagen?

Antwort

-3

Das ist ziemlich genau richtig.

Die andere Option ist, Sie könnten es in eine .js.erb teilweise einfügen und das aus Ihrer hamil Ansicht rendern.

Dann können Sie einfach tun

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

Ich habe nicht versucht, aber ich denke, würde man

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

tun könnte (wie in dem zweiten Beispiel here.)

Für ein sehr kurzes Stück JavaScript können Sie auch versuchen

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

Ich habe das in meinem Layout über einen = yield :foot_scripts Anruf erreicht, dann dann:

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

in meinen Ansichten - auf diese Weise ich die Javascript gewährleisten kann, wird genau ausgeführt, wo ich es im DOM sein will (Nach allem anderen), und pflegen Sie es in einer separaten Datei, die wesentlich sauberer ist. Skript aus Ihren View-Dateien holen? GUT!

2

ich dies tun:

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

Im obigen Fall ist die Bedingung params[:param_to_check_for].blank?.

Es macht die JavaScript als entweder: if(false) oder if(true)

+1

Warum ist eine Zeichenfolge wahr , aber falsch ein Boolescher? – onebree

+0

@HunterStevens kein guter Grund ... wahrscheinlich nur weil es funktioniert :) jetzt behoben. – Caleb

0

ich den Rubin/HAML Variable in explizite JS wie diese true oder false für JS Zustand interpoliert haben:

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