2010-11-17 78 views
7

有没有办法将html.erb部分渲染为一行字符串?Ruby on Rails:将HTML部分渲染为一行字符串

我想呈现一个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脚本的代码行,那就是一场灾难。

会有其他方法吗?

在此先感谢。

回答

14

使用escape_javascript功能:

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

如果你发现'escape_javascript'是太多打字,记住它的别名是'j'。 – 2012-09-20 13:42:33

1

快速和肮脏的黑客:

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

这只是替换空格换行,从HTML解析器点无操作。

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