render a partial from jquery and haml

霸气de小男生 提交于 2019-12-09 12:22:44

问题


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?


回答1:


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).




回答2:


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




回答3:


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


来源:https://stackoverflow.com/questions/3416460/render-a-partial-from-jquery-and-haml

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!