web-dev-qa-db-ja.com

rails)でjs.hamlを送り返す方法

私は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を使用できますか?もしそうなら、マークアップはどのように見えるべきですか?

37
Cameron

実際、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。

74
Karl

Hamlは本当にHTMLを生成することを目的としています。理論的にはcreate.js.hamlを使用できますが、Javascriptを作成する場合はERBの方がはるかに理にかなっています。

4

各行の前に!=は必要ないようです。以下は私にとってはうまくいきます。 Rails 3および最新バージョンのHAMLを使用しています

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

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を使用することをお勧めします。

0
loafoe