1

我读过帖子说不可能在 js.erb 文件中呈现部分内容。实现此目的的正确方法是什么?

我正在尝试使用 jquery ui 在对话框中呈现联系表单。

var contactHtml = $('<div></div>').html("test").dialog({
    autoOpen: false,
    title: 'hi'
});

谢谢

4

3 回答 3

3
       $('<div></div>').html("<%= j(render :partial => 'example/file') %>")

只要记住用 j 转义你的渲染调用(与 escape_javascript 同义)。在处理 ajax 调用时,您会经常使用这种方法。

编辑

如果您从资产文件夹中尝试此操作,则这是不可能的,您将收到未定义的方法渲染错误。这是一个类似的问题以获取更多详细信息

于 2012-08-29T22:59:39.133 回答
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
于 2012-08-30T00:29:59.923 回答
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 %>

希望这可以帮助!

于 2012-08-29T23:00:23.607 回答