我读过帖子说无法在js.erb文件中呈现部分内容。实现这个目标的正确方法是什么?
我正在尝试使用jquery ui在对话框中呈现联系表单。
var contactHtml = $('<div></div>').html("test").dialog({
autoOpen: false,
title: 'hi'
});
由于
答案 0 :(得分:3)
$('<div></div>').html("<%= j(render :partial => 'example/file') %>")
请记住使用j(与escape_javascript同义)转义渲染调用。在处理ajax调用时,你会经常使用这种方法。
修改
如果从资源文件夹中尝试此操作,则无法进行此操作,您将获得未定义的方法渲染错误。以下是similar Question了解详情
答案 1 :(得分:1)
我仍然使用了部分表单,但是我用ajax渲染了它。
在我的js.erb文件中
var contactHtml = $('<div></div>').dialog({
autoOpen: false,
title: 'Get a Free Estimate',
minWidth:400,
close: function(){$(this).empty();}
});
$('#consultation').click(function(){
$.get('/contact_form', function(data){
contactHtml.append(data);
});
contactHtml.dialog('open');
return false;
});
路线:
match "contact_form" => "application#contact_form", :via => :get
应用程序控制器:
def contact_form
@contact = Refinery::Contacts::Contact.new
render :partial => "/contact_form", :locals => {:contact => @contact}
end
答案 2 :(得分:0)
通常,您可以在js.erb中执行以下操作:
$("yourclass").javascript_action("<%= escape_javascript(render('partial_name', :local_var_name => @local_var_name)) %>");
并在你的部分传递当地人:
<%= render 'partial_name', :local_var_name => local_var_name %>
希望这有帮助!