質問
ファイルでjqueryを送り返すrails createアクションがあります:
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の方法を使用したい場合があります。
所属していません StackOverflow