从jquery和haml中渲染出局部

时间:2010-08-05 15:41:40

标签: jquery ruby-on-rails haml renderpartial

我计划执行的功能是根据从select标签中选择的数字插入一些表单元素。

我有一个名为number_of_passengers的select标签,我打算为所选的号码动态附加新的乘客字段。假设我从number_of_passengers中选择2,那么2个表单应该出现在字段集中。这些表格包含姓名,年龄等。

我试过这个:

call a rails function from jquery?

并将其转换为haml-speak,但每次使用:javascript标记时都会出错。此外,我不认为一旦我进入javascript标签就可以“逃避”

: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 }) %>');
    }
  })

因为我在form_for中,如何将@booking变量传递给本地?看起来真的很复杂,而且我打算从循环20次(20个最大乘客)中做出肮脏的方式,然后根据所选的数字隐藏/显示它们。但是你觉得这太脏了?

3 个答案:

答案 0 :(得分:12)

要使插值工作,您需要执行类似

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

如此简单地说:将!=添加到行的开头,并在双引号之间包含字符串。

关于@booking的问题:我建议您调查一些嵌套表单示例,以便更清楚地了解您(例如thisthis railscast)。

答案 1 :(得分:3)

我实际上通过添加:

来实现这一目标
respond_to do |format|
  format.js { render :partial => "new_passenger" }
end

所以即使请求是在js中,它也会返回一个html部分。漂亮的

答案 2 :(得分:0)

Rails语法一直在变化,但不应该这样

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

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

你可以在javascript块中转义javascript,因为你正在评估ruby标签。

您收到了哪些错误消息?

你问题的后半部分对我来说并不清楚,但这就是你要找的东西:

- form_for @user do |f|
  # f.object is equal to @user