render a partial from jquery and haml

2019-03-20 15:45发布

The functionality I plan on doing is to insert some form elements depending on a number chosen from a select tag.

I have a select tag called for number_of_passengers, and i plan to dynamically append new passenger fields for the number chosen. Say I select 2 from number_of_passengers, then 2 forms should appear in a fieldset. these forms contain name, age weight etc.

I tried following this:

call a rails function from jquery?

and just converted it to haml-speak but I get errors whenever I use the :javascript tag. Also I don't think I can "escape" the javascript tag once I am in it

:javascript
  $('#number_of_passengers').change(function() {
    var $num_of_passengers = $(this).val();
    for($i=0; $i<$num_of_passengers;$i++) {
      $('.passenger-info ul').append('<%= escape_javascript( render :partial => "new_passenger", :locals => {:booking => @booking }) %>');
    }
  })

also since I am in a form_for, how do I pass the @booking variable to the local? It seems really complicated and I'm planning of doing the dirty way out of just looping 20 times(20 max passengers) then just hide/show them depending on the selected number. But that's too dirty don't you think?

3条回答
该账号已被封号
2楼-- · 2019-03-20 16:00

To get the interpolation working you need to do something like

!= "$('.passenger-info ul').append('#{escape_javascript( render :partial => 'new_passenger', :locals => {:booking => @booking })}');

so simpler said: add the != to the start of the line, and include the string between double quotes.

Your question about the @booking: I suggest you investigate some nested forms examples to make it clearer for you (e.g. this and this railscast).

查看更多
我命由我不由天
3楼-- · 2019-03-20 16:12

i actually managed to do this by adding:

respond_to do |format|
  format.js { render :partial => "new_passenger" }
end

so even if the request was in js, it will return an html partial. Nifty

查看更多
forever°为你锁心
4楼-- · 2019-03-20 16:12

Rails syntax changes all the time but shouldn't this

render :partial => "new_passenger", :locals {:booking => @booking })

be

render :partial => "new_passenger", :locals => {:booking => @booking })

You can escape javascript within the javascript block because you're evaluating ruby tags.

Which error messages are you receiving?

The latter part of your question isn't clear to me but is this what you're looking for:

- form_for @user do |f|
  # f.object is equal to @user
查看更多
登录 后发表回答