【问题标题】:Interpolate ruby if statement in haml javascript block在haml javascript块中插入ruby if语句
【发布时间】:2012-06-24 08:04:53
【问题描述】:

这是我目前拥有的代码:

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

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

我知道如何用#{} 插入变量,但是你如何对整个 if/for/etc 做同样的事情。声明?

【问题讨论】:

    标签: javascript ruby-on-rails ruby haml


    【解决方案1】:

    我这样做:

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

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

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

    【讨论】:

    • 为什么 true 是字符串,而 false 是布尔值?
    • @HunterStevens 没有充分的理由......可能只是因为它有效:) 现在已修复。
    【解决方案2】:

    我没试过,但我想你可以做

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

    (如第二个示例here。)

    对于很短的一段javascript,你也可以试试

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

    【讨论】:

      【解决方案3】:

      我已将 Ruby/HAML 变量插入到显式 JS truefalse 中,用于 JS 条件如下:

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

      【讨论】:

        【解决方案4】:

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

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

        在我看来——这样我可以确保 Javascript 在我希望它在 DOM 中的位置准确执行(在其他所有内容之后),并将其维护在一个单独的文件中,这非常干净。从您的视图文件中获取脚本?好!

        【讨论】:

          【解决方案5】:

          说的很对。

          另一种选择是您可以将其放入 .js.erb 部分并从您的 haml 视图中呈现。

          那你就可以了

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-19
            • 2016-05-31
            • 1970-01-01
            • 1970-01-01
            • 2011-12-01
            相关资源
            最近更新 更多