如何在rails中发回js.haml

时间:2009-10-25 21:52:17

标签: jquery ruby-on-rails haml

我有一个rails create action,它会在文件中发回一些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吗? 如果是这样,标记应该是什么样的?

4 个答案:

答案 0 :(得分:72)

实际上,在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。

答案 1 :(得分:4)

Haml真的打算生成HTML。理论上,你可以使用create.js.haml,但是当你编写Javascript时,ERB更有意义。

答案 2 :(得分:2)

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

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

答案 3 :(得分:0)

在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方式。