【问题标题】:rails 3 - escaping partial's generated html in javascript responserails 3 - 在javascript响应中转义部分生成的html
【发布时间】:2012-01-21 23:13:36
【问题描述】:

我正在尝试做一件简单的事情:

_flash.js.erb:

$("#alerts").append("<%=j render :template => "shared/_flash.html.erb" %>");

注意

_flash.html.erb:

<% flash.each do |key, value| %>
  <div class="alert-message top <%= "#{key}" %> fade in" data-alert="alert">
    <a class="close" href="#">x</a>
    <p><%=j value %></p>
  </div>
<% end %>

但是,当调用 _flash.js.erb 时,会附加如下内容:

$("#alerts").append("  \u003Cdiv class=alert-message top warning fade in data-alert=alert\u003E
    \u003Ca class=close href=#\u003Ex\u003C/a\u003E
    \u003Cp\u003ELooks like you have already linked with Facebook.\u003C/p\u003E
  \u003C/div\u003E
");

没有 javascript 转义,响应是这样的:

$("#alerts").append("  <div class="alert-message top warning fade in" data-alert="alert">
    <a class="close" href="#">x</a>
    <p>Looks like you have already linked with Facebook.</p>
  </div>
");

在第一个响应中,转义了太多东西。在第二个响应中,没有任何东西被转义,双引号把事情搞砸了。

在 Rails 3 中以稳健的方式实现上述目标的推荐方法是什么?

【问题讨论】:

  • 原来使用 escape_javascript(...) 而不是 会产生预期的结果。奇怪 - 认为他们是同一件事。我想我将不得不解决更多冗长的问题。有没有更简洁的替代方案或使 起作用的方法?

标签: javascript ruby-on-rails view


【解决方案1】:

请改用escape_javascript;你是JSON-escaping它。

你可以用同样的方式给某个东西起别名,j 是json_escape 的别名;它只是一个帮手。

【讨论】:

猜你喜欢
  • 2011-08-06
  • 1970-01-01
  • 1970-01-01
  • 2020-01-30
  • 2013-03-03
  • 2011-06-15
  • 1970-01-01
  • 1970-01-01
  • 2011-01-23
相关资源
最近更新 更多