简体   繁体   中英

Ruby on Rails: Render HTML partial as a one line of string

Is there a way to render a html.erb partial as a one line of string?

I am trying to render a _foo.html.erb partial inside a javascript, such that I can use the whole html document as a string variable.

I have tried the following code:

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

And inside _foo.html.erb, let's say I have the following:

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

This way will give me a syntax error in javascript because there is CRLF in the partial. But if I write code like...

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

Now, it's not an error in javascript. I can do the latter way, but it is a disaster if the partial contains a lot of lines of code with ruby script.

Would there be any alternative way?

Thanks in advance.

使用escape_javascript函数:

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

Quick and dirty hack:

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

This just replaces the newlines with spaces, a no-op from the point of view of an HTML parser.

However, this is a pretty fragile way to create JavaScript objects. You'll need to account for quotes in the partial that'll make your JavaScript invalid, etc. I'd suggest trying to create JavaScript templates for the HTML you want to render and populate them with JSON versions of your Models.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM