如何在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如何在工作表区域内查找某个值,发回这个值所在的行号、列号