2010-11-17 109 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版本填充它們。