How to send back js.haml in rails

后端 未结 4 1900
一生所求
一生所求 2020-12-13 02:32

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

create.js.erb

var appearance = $(\"<%= escape_javascript(rend         


        
相关标签:
4条回答
  • 2020-12-13 03:02

    In a js.haml it would look something like

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

    Note the HAML != syntax which prevents the generated text from being HTML escaped. I do agree that ERB is a better fit here, but for consistency stake you might still want to go the HAML way.

    0 讨论(0)
  • 2020-12-13 03:14

    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 })}');
    
    0 讨论(0)
  • 2020-12-13 03:20

    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.

    0 讨论(0)
  • 2020-12-13 03:25

    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.

    0 讨论(0)
提交回复
热议问题