2009-10-25 37 views
33

我有一个轨道创造作用,这在一个文件中发回了一些jQuery的:如何发送回js.haml在轨

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吗? 如果是这样的标记应该是什么样子?

回答

69

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

+12

请注意,在最新版本的haml中不需要':plain'。 – ocodo 2012-07-08 15:35:06

+0

我仍然使用rails 3和haml 3.1.7获取原始html – 2016-11-30 11:56:19

3

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

+8

小心解释为什么在编写Javascript时使用ERB会“更有意义”?我发现HAML很好,很干净,并且也可以和Coffeescript一起工作。 ty – Florin 2011-06-05 18:54:36

+2

@Florin因为Haml是专门为HTML和XML语法而设计的。当您使用它产生任何其他内容时,您需要做太多的转义工作或以其他方式解决输出不是HTML或XML的问题。 Haml的清理工作很好,但只适用于HTML/XML。 – 2012-04-20 05:45:59

+1

如果您可以使用以下过滤器,则不需要转义:javascript或:plain,请参阅上面接受的答案。 – Florin 2012-04-23 16:55:07

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

1

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

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