私はRailsファイルで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を使用できますか?もしそうなら、マークアップはどのように見えるべきですか?
実際、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は本当にHTMLを生成することを目的としています。理論的にはcreate.js.haml
を使用できますが、Javascriptを作成する場合はERBの方がはるかに理にかなっています。
各行の前に!=は必要ないようです。以下は私にとってはうまくいきます。 Rails 3および最新バージョンのHAMLを使用しています
$('#comments_table_header').after('#{escape_javascript(render :partial => 'row', :locals => { :comment => @comment })}');
Js.hamlでは次のようになります
!= "var appearance = $('<%= escape_javascript(render(:partial => @appearance)) %>').effect('highlight', {color: '#E6ff00'}, 2000);"
!= "$('#sortable').append(appearance);"
!= "$('#new_appearance')[0].reset();"
生成されたテキストがHTMLエスケープされるのを防ぐHAML!=構文に注意してください。ここではERBの方が適していることに同意しますが、一貫性を保つために、HAMLを使用することをお勧めします。