在haml javascript块中插入ruby if语句

时间:2012-06-22 01:31:38

标签: javascript ruby-on-rails ruby haml

这是我目前的代码:

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

因为我重复了:javascript haml过滤器,所以显然不是很干净。我想避免这种情况,但我不知道如何在HAML:javascript块中正确编写Ruby“if”语句。

我知道如何使用#{}插入变量,但是如何对整个if / for / etc执行相同操作。语句?

5 个答案:

答案 0 :(得分:3)

我这样做:

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

在上述情况下,条件是 params[:param_to_check_for].blank?

它将JavaScript呈现为:if(false)if(true)

答案 1 :(得分:2)

我没试过,但我认为你可以做到

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

(如第二个例子here。)

对于一小段javascript,您也可以尝试

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

答案 2 :(得分:0)

我已将Ruby / HAML变量插入显式JS truefalse以获取JS条件,如下所示:

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

答案 3 :(得分:-1)

我已经通过布局中的= yield :foot_scripts调用完成了此操作,然后:

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

在我的视图中 - 通过这种方式,我可以确保Javascript完全执行到我希望它在DOM中的位置(在其他所有内容之后),并将其保存在一个单独的文件中,这个文件非常清晰。从您的视图文件中获取脚本? GOOD!

答案 4 :(得分:-3)

这是非常正确的。

另一个选择是你可以将它放在.js.erb部分中并从你的haml视图中呈现它。

然后你可以做

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