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"

(就像这里的第二个例子一样。)

对于非常短的 javascript,您也可以尝试

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

我已将 Ruby/HAML 变量插入到显式 JStruefalseJS 条件中,如下所示:

$("#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

这是非常正确的。

另一种选择是你可以把它放在一个.js.erb部分中,然后从你的 haml 视图中渲染它。

然后你可以做

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