【问题标题】:How to send back js.haml in rails如何在rails中发回js.haml
【发布时间】:2010-12-09 23:34:34
【问题描述】:

我有一个 rails create 操作,它在文件中发回一些 jquery:

create.js.erb

var appearance = $("<%= escape_javascript(render(:partial => @appearance)) %>").effect("highlight", {color: '#E6ff00'}, 2000);
$("#sortable").append(appearance);
$("#new_appearance")[0].reset();

我已经开始使用 HAML,想知道我应该如何转换它。我可以使用 js.haml 吗? 如果是这样,标记应该是什么样的?

【问题讨论】:

    标签: jquery ruby-on-rails haml


    【解决方案1】:

    实际上,在 HAML 中返回 JS 非常简单,只需使用 :plain 过滤器并在 #{} 中包含您想要评估的任何内容。

    :plain
      var appearance = $("#{escape_javascript(render(:partial => @appearance)}").effect("highlight", {color: '#E6ff00'}, 2000);
      $("#sortable").append(appearance);
      $("#new_appearance")[0].reset();
    

    不要使用 :javascript 过滤器,因为它会将所有内容包含在不必要的标签中。

    如果您需要使用一些逻辑,只需将 :plain 放在嵌套中即可。

    - if params[:printing]
      :plain
        $('#print-view').html("#{escape_javascript(render 'print_preview')}");
    

    对不起ERB。

    【讨论】:

    • 请注意,最新版本的haml中不需要:plain
    • 我仍然使用 rails 3 和 haml 3.1.7 获得原始 html
    【解决方案2】:

    Haml 的真正目的是生成 HTML。理论上,您可以使用 create.js.haml,但在编写 Javascript 时,ERB 更有意义。

    【讨论】:

    • 想解释一下为什么在编写 Javascript 时使用 ERB 会“更有意义”?我发现 HAML 很好,更干净,也可以与 Coffeescript 一起使用。 ty
    • @Florin 因为 Haml 是专门为 HTML 和 XML 的语法设计的。当您使用它生成任何其他内容时,您需要进行过多的转义或以其他方式解决输出不是 HTML 或 XML 的事实。 Haml 的清洁器没问题,但仅适用于 HTML/XML。
    • 如果您可以使用 :javascript 或 :plain 等过滤器,则无需转义,请参阅上面接受的答案。
    • @Florin 但这仅在嵌入 HTML 或 XML 时才有效。如果您需要生成一个至少没有封装在 HTML 或 XML 中的文档,那么使用 Haml 是没有意义的。
    【解决方案3】:

    看起来您不需要在每行前面加上 !=。以下对我来说很好。我正在使用 Rails 3 和最新版本的 HAML

    $('#comments_table_header').after('#{escape_javascript(render :partial => 'row', :locals => { :comment => @comment })}');
    

    【讨论】:

      【解决方案4】:

      在 js.haml 中它看起来像

      != "var appearance = $('<%= escape_javascript(render(:partial => @appearance)) %>').effect('highlight', {color: '#E6ff00'}, 2000);"
      != "$('#sortable').append(appearance);"
      != "$('#new_appearance')[0].reset();"
      

      注意 HAML != 语法可防止生成的文本被 HTML 转义。我确实同意 ERB 更适合这里,但为了保持一致性,您可能仍然希望采用 HAML 方式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-05-04
        • 2011-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多