Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to send back js.haml in rails

I have a rails create action which send back some jquery in a file:

create.js.erb

var appearance = $("<%= escape_javascript(render(:partial => @appearance)) %>").effect("highlight", {color: '#E6ff00'}, 2000);
$("#sortable").append(appearance);
$("#new_appearance")[0].reset();

I have started using HAML and want to know how I should be converting this. Can I use js.haml? If so what should the markup look like?

like image 843
Cameron Avatar asked Oct 25 '09 21:10

Cameron


3 Answers

Actually, returning JS in HAML is pretty easy, just use the :plain filter and enclose anything you want evaluated in #{}.

:plain
  var appearance = $("#{escape_javascript(render(:partial => @appearance)}").effect("highlight", {color: '#E6ff00'}, 2000);
  $("#sortable").append(appearance);
  $("#new_appearance")[0].reset();

Do not use the :javascript filter as it will enclose everything in a tag which is unnecessary.

If you need to use some logic, just put the :plain inside the nesting.

- if params[:printing]
  :plain
    $('#print-view').html("#{escape_javascript(render 'print_preview')}");

Sorry ERB.

like image 140
Karl Avatar answered Oct 11 '22 19:10

Karl


Haml's really meant to generate HTML. You could, in theory, use create.js.haml, but ERB makes much more sense when you're writing Javascript.

like image 35
Natalie Weizenbaum Avatar answered Oct 11 '22 17:10

Natalie Weizenbaum


Well looks like you dont need the != in front of each line. The following works for me just fine. Im using Rails 3 and latest version of HAML

$('#comments_table_header').after('#{escape_javascript(render :partial => 'row', :locals => { :comment => @comment })}');
like image 2
Mohith Thimmaiah Avatar answered Oct 11 '22 17:10

Mohith Thimmaiah