如何在rails中发回js.haml

Posted

技术标签:

【中文标题】如何在rails中发回js.haml【英文标题】:How to send back js.haml in rails 【发布时间】: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 吗? 如果是这样,标记应该是什么样的?

【问题讨论】:

【参考方案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 方式。

【讨论】:

以上是关于如何在rails中发回js.haml的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Qt 中的 HTTP Post 之后从 PHP 发回数据?

IBM Worklight 6.0 - 如何将日志写入文件并将它们发回?

VBA Excel如何在工作表区域内查找某个值,发回这个值所在的行号、列号

我是不是错误地使用了 GraphQL?我不知道它是如何向我发回数据的

如何发回表格?

如何等待函数或数据库查询?然后处理结果,最后发回