[英]Render simple form partial in Rails/Javascript
我想在javascript erb文件中部分渲染表单。 当我将它放在那里时,它没有方法错误。 有任何想法吗?
script.js.erb
$(document).ready(function() {
$(".enquiry-button").click(function(e) {
e.preventDefault();
e.stopPropagation();
if ($(this).parents('.cell').find('form').length == 0) {
$(this).closest('.cell').append(
"<div class='enquiry-form'>" +
"<%= escape_javascript( render '/static/form' ) %>" +
"</div>");
$(this).closest('.cell').find(".enquiry-form:last").slideDown("slow");
} else {
$(this).closest('.cell').find(".enquiry-form:last").slideToggle("fast");
}
});
});
_form.html.erb
<%= simple_form_for @user do |f| %>
<%= f.error_messages %>
<%= f.input :email %>
<%= f.button :submit %>
<% end %>
错误
NoMethodError in Static#home
Showing /Users/colton/kitchen_ninja/kitchen_ninja/app/views/layouts/application.html.erb where line #6 raised:
undefined method `render' for #<#<Class:0x007f90cc875c80>:0x007f90cd2017e0>
(in /Users/colton/kitchen_ninja/kitchen_ninja/app/assets/javascripts/script.js.erb)
Extracted source (around line #6):
您正在将两个独立的事物混合在一起。 render
需要在服务器上运行。 JavaScript的工作只是发出AJAX请求并获取资源。
因此,假设您要这样做:
$.ajax(url: "/test").done(function(html) {
$("#results").append(html);
});
AJAX的唯一作用是获取远程资源并解析结果。
在Ruby中,您可以使用render
发出HTML:
<%= escape_javascript( render '/static/form' ) %>
只需确保将AJAX请求指向正确的资源,以便Ruby可以完成其余的工作。
由于您使用.erb
预处理脚本, .erb
可以使用Ruby的字符串插值在JavaScript文件中以字符串文字形式返回partial。
html = "<div class='enquiry-form'>" +
"#{j render partial: 'static/form'}}" +
"</div>"
$(this).closest('.cell').append( html );
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.