我计划执行的功能是根据从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个最大乘客)中做出肮脏的方式,然后根据所选的数字隐藏/显示它们。但是你觉得这太脏了?
答案 0 :(得分:12)
要使插值工作,您需要执行类似
的操作!= "$('.passenger-info ul').append('#{escape_javascript( render :partial => 'new_passenger', :locals => {:booking => @booking })}');
如此简单地说:将!=
添加到行的开头,并在双引号之间包含字符串。
关于@booking
的问题:我建议您调查一些嵌套表单示例,以便更清楚地了解您(例如this和this 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