7

我正在编写一个在后端使用 Rails 并在前端使用 javascript/backbone 的应用程序。我正在尝试将一些 rails 模型引导到我的 javascript中。具体来说,我想将 的内容加载@courses到一个名为window.courses. 我在一个html.erb文件中有以下内容。

<%= javascript_tag do %>
    window.courses = JSON.parse('<%= @courses.to_json %>');
<% end %>

我期待erb预处理器将其呈现为有效的javascript,就像这样

<script type="text/javascript">
//<![CDATA[
    window.courses = JSON.parse('[{"code":"myCourseCode", ...
//]]>
</script>

...但是,相反,我得到了包含HTML 实体的代码。

<script type="text/javascript">
//<![CDATA[
    window.courses = JSON.parse('[{&quot;code&quot;:&quot;myCourseCode&quot;, ...
//]]>
</script>

显然,当我尝试解析它时,我得到了 javascript 错误。

有谁知道我如何处理这些 HTML 实体以生成有效的 javascript?我意识到一种选择是对客户端的实体进行转义,但这似乎是一个迂回的解决方案。有没有一种方法可以让 Rails 生成不需要转义的 JSON?

4

2 回答 2

9

如果您打算使用 raw(obj.to_json) 您必须确保设置了以下内容。

ActiveSupport.escape_html_entities_in_json = true 
于 2013-02-02T19:56:51.027 回答
5

我的评论解决了这个问题,仅供记录:

Rails 转义使用<%= 'string' %>. 这样,就可以保存输出用户数据。因此,如果您不希望 Rails 转义输出,则必须使用raw('string').

在您的代码中,这将是: <%= raw(@courses.to_json) %>

于 2012-10-08T20:16:52.500 回答