質問

ファイルで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の方法を使用したい場合があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top