2009-10-25 39 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 })}');