如何从js.erb文件传递部分html.erb表单而不仅仅是一条消息?

时间:2017-05-03 08:08:35

标签: javascript jquery ruby-on-rails

我正在尝试在rails app上的示例ruby上实现jquery。我刚开始探索js。我知道我在js / jquery学到了很多东西。现在有一些我坚持的事情。

我有一个js.erb文件,如下所示:

js.erb

<% if @phone_number.verified %>
  $('#verify-pin').hide()
  $('#status-box').removeClass()
  $('#status-box').addClass('alert alert-success')
  $('#status-message').text('Verified!!')
<% else %>
  $('#status-box').removeClass()
  $('#status-box').addClass('alert alert-warning')
  $('#status-message').text("Sorry, that wasn't the right pin.")
<% end %>
$('#status-box').fadeToggle()

如果您看到第5行,那么我现在只是闪烁一条短信“已验证!!”当条件为真时。但我希望显示部分erb 表单。我有一个 _form.html.erb 文件。如何显示此内容而不是短信?

2 个答案:

答案 0 :(得分:3)

您使用escape_javascript方法。

$('#status-message').html("<%= escape_javascript(render 'form) %>");

它也被别名为j

$('#status-message').html("<%= j(render 'form) %>");

显然你可能想用这个做一些更奇特的东西,但这是基本的想法。

答案 1 :(得分:1)

虽然你确实有.js.erb并且可以直接在你的JS中使用erb,但是我想展示一个解决方法,它适用于没有.js.erb的人(例如使用.coffee格式)并且可以工作对于所有构建堆栈。

在application.html.erb中,添加脚本标记并启动全局变量,然后您可以使用该变量在需要部分时附加部分。像这样:

<script>
    partials = {
        foobarPartial: '<%= escape_javascript(render partial: 'foobar', :locals => { :local_var_1 => false, :local_var_2 => 'foo' }) %>'
    };
</script>

然后,只要你需要那个部分,只需通过.html(partials.foobarPartial)添加它