39

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

创建.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

4 回答 4

76

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

于 2011-02-17T17:56:02.630 回答
4

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

于 2009-10-25T23:48:21.860 回答
2

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

$('#comments_table_header').after('#{escape_javascript(render :partial => 'row', :locals => { :comment => @comment })}');
于 2011-02-18T15:54:27.033 回答
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 方式。

于 2010-10-03T06:48:21.727 回答