15

これは私が現在持っているコードです:

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

:javascript haml フィルターを繰り返しているため、明らかにきれいではありません。それを避けたいのですが、HAML :javascript ブロック内に Ruby の "if" ステートメントを適切に記述する方法がわかりません。

#{} で変数を補間する方法は知っていますが、if/for/etc 全体で同じことを行うにはどうすればよいでしょうか。声明?

4

5 に答える 5

5

私はこれをします:

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

上記の場合、条件は params[:param_to_check_for].blank?です。

JavaScript を次のいずれかとしてレンダリングします:if(false)またはif(true)

于 2014-04-27T06:24:26.407 に答える
2

試したことはありませんが、できると思います

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

(ここの 2 番目の例のように。)

非常に短いJavaScriptの場合は、試すこともできます

:javascript
    // do something
    #{current_user.role? :client ? "//do something else" : ""}
于 2012-06-22T02:08:54.283 に答える
0

Ruby/HAML 変数を明示的な JStrueまたはfalse次のような JS 条件に補間しました。

$("#cancel").click( function() {
  if (#{ !!my_flag_variable })
    window.location.href = "./";
  else
    $("#dialog").hide();
} );
于 2017-03-30T15:38:45.297 に答える
-1

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

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

私の見解では — そうすれば、Javascript が DOM 内の希望する場所 (他のすべての後) に正確に実行され、別のファイルに保持されるため、非常にクリーンになります。ビュー ファイルからスクリプトを取得しますか? 良い!

于 2012-06-22T04:46:36.340 に答える
-3

その通りです。

もう 1 つのオプションは、.js.erb部分的に配置して、haml ビューからレンダリングすることです。

それからあなたはただすることができます

// do something
<% if condition == true %>
  // do something else
<% end %>
于 2012-06-22T01:42:51.950 に答える