从jquery和haml中呈现部分
我计划执行的功能是根据从select标记中选择的数字插入一些表单元素 我有一个select标签,名为number of theu passengers,我计划为所选号码动态添加新的passenger字段。假设我从乘客数量中选择2,那么字段集中应该出现2个表单。这些表格包括姓名、年龄、体重等 我试着这样做: 并将其转换为haml speak,但每当我使用:javascript标记时都会出错。此外,我认为一旦我进入javascript标记,我就无法逃脱它从jquery和haml中呈现部分,jquery,ruby-on-rails,haml,renderpartial,Jquery,Ruby On Rails,Haml,Renderpartial,我计划执行的功能是根据从select标记中选择的数字插入一些表单元素 我有一个select标签,名为number of theu passengers,我计划为所选号码动态添加新的passenger字段。假设我从乘客数量中选择2,那么字段集中应该出现2个表单。这些表格包括姓名、年龄、体重等 我试着这样做: 并将其转换为haml speak,但每当我使用:javascript标记时都会出错。此外,我认为一旦我进入javascript标记,我就无法逃脱它 :javascript $('#numb
: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 }) %>');
}
})
此外,由于我的表单为,如何将@booking变量传递给本地用户?这似乎真的很复杂,我正计划做肮脏的方式,不只是循环20次最多20名乘客,然后根据所选的人数隐藏/显示他们。但是这太脏了,你不觉得吗?Rails语法一直在变化,但这不应该吗
render :partial => "new_passenger", :locals {:booking => @booking })
是
您可以在javascript块中转义javascript,因为您正在评估ruby标记
您正在接收哪些错误消息
我不清楚你问题的后半部分,但这就是你想要的吗:
- form_for @user do |f|
# f.object is equal to @user
要使插值工作,您需要执行以下操作
!= "$('.passenger-info ul').append('#{escape_javascript( render :partial => 'new_passenger', :locals => {:booking => @booking })}');
简单地说:添加!=添加到行的开头,并在双引号之间包含字符串
您关于@booking的问题:我建议您调查一些嵌套表单示例,以使您更清楚,例如和railscast。我实际上通过添加以下内容来做到这一点:
respond_to do |format|
format.js { render :partial => "new_passenger" }
end
因此,即使请求是js格式的,它也会返回一个html部分。你好,谢谢你的回复。我生病了。不管怎么说,我已经纠正了拼写错误,但我仍然感到困惑。我会编辑一下这个问题,然后给你看问题。嗯,谢谢!这是什么意思!=意思是我现在就把它作为书签,以后再检查,因为我只是使用了一个硬编码的JSF来手动插入表单html…脏的,但它可以工作。它将很快被重构,尽管!=表示unescape HTML,因此它将按原样插入ruby字符串,而不会转义它。与normal=相反,normal=用于计算和转义字符串,以便安全地包含在HTML中。更多:更容易。。。使用:plain过滤器而不是:javascript。是否需要前导?您是否尝试过我的答案?如果不清楚:您在haml中使用的是erb样式的插值。但很高兴你发现了一些有用的东西。我正在尝试理解你在这里所做的事情,也对基于javascript条件中的内容呈现一些HTML感兴趣。哪里有新乘客?还有你的答案;您将此代码放置在何处?new_passenger与控制器存在于同一个视图文件夹中,因此在我的情况下,bookingscontroller将其命名为app/views/bookings
respond_to do |format|
format.js { render :partial => "new_passenger" }
end