2012-06-22 11 views
11

場合、これは私が現在持っているコードです:javascriptのHAMLフィルタ:私は繰り返してるので、それは明らかに非常にきれいではありません補間ルビーHAML中の文のjavascriptブロック

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

。私はそれを避けたいと思いますが、HAML:javascriptブロック内にRubyのif文を正しく記述する方法はわかりません。

私は#{}で変数を補間する方法を知っていますが、/ etc/ifの場合は全体に対して同じようにします。声明?

答えて

-3

これはかなり正しいです。

もう1つの選択肢は、.js.erb部分に配置し、それをあなたのハム・ビューからレンダリングすることです。

次に、あなただけの私はそれを試していない

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

行うことができますが、私はあなたが

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

を行うことができると思うだろう(第二の例hereのように。)

非常に短いjavascriptについては、試してみることもできます

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

私はその後、その後、私のレイアウトで= yield :foot_scripts呼び出しを介してこれを達成しました:

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

を、私の見解では - 私はそれが(DOMになりたい場所を、私はJavascriptを確保することができる方法が正確に実行されますそれ以降はすべて)、それを別のファイルに保存してください。これははるかにクリーンです。ビューファイルからスクリプトを取得しますか?良い!

2

私はこれを実行します。上記の場合

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

を、条件が params[:param_to_check_for].blank?です。

それはどちらかとJavaScriptをレンダリング:if(false)またはif(true)

+1

なぜ真の文字列がありますブール値は偽ですか? – onebree

+0

@HunterStevensいい理由は...おそらくちょうどそれが働いたから:)今すぐ修正されました。 – Caleb

0

私はこのようなJS条件の明示的なJS trueまたはfalseへのRuby/HAML変数を補間してきました:

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