【问题标题】:Ruby on Rails: Render HTML partial as a one line of stringRuby on Rails:将 HTML 部分呈现为一行字符串
【发布时间】:2011-05-11 17:19:33
【问题描述】:

有没有办法将 html.erb 部分渲染为一行字符串?

我正在尝试在 javascript 中呈现 _foo.html.erb 部分,这样我就可以将整个 html 文档用作字符串变量。

我已经尝试了以下代码:

var foo = "<%= render :partial => "foo" %>";

在 _foo.html.erb 中,假设我有以下内容:

<h1>Hello</h1>
<p>World</p>

这种方式会在 javascript 中出现语法错误,因为部分中有 CRLF。 但是如果我写这样的代码......

<h1>Hello</h1>" +
"<p>World</p>

现在,这不是 javascript 中的错误。 我可以做后一种方式,但是如果部分包含很多带有 ruby​​ 脚本的代码行,那就是一场灾难。

还有其他方法吗?

提前致谢。

【问题讨论】:

    标签: javascript ruby-on-rails-3 render partial


    【解决方案1】:

    使用 escape_javascript 函数:

    var foo = "<%= escape_javascript(render :partial => 'foo') %>";
    

    【讨论】:

    • 如果您发现escape_javascript 输入过多,请记住它的别名为j
    【解决方案2】:

    快速而肮脏的黑客攻击:

    var foo = "<%= render(:partial => "foo").gsub(/[\n\r]/, ' ') %>";
    

    这只是用空格替换换行符,从 HTML 解析器的角度来看是无操作的。

    然而,这是一种非常脆弱的创建 JavaScript 对象的方法。您需要考虑部分引号会使您的 JavaScript 无效等。我建议您尝试为要呈现的 HTML 创建 JavaScript 模板,并使用模型的 JSON 版本填充它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多