我想在我的js.erb文件中渲染一个部分,这样我就可以在我的Javascript中使用生成的HTML。这里有一些代码作为例子。
create.js.erb
$(function(){
var html = "<%= render(:partial => `pretty_box`) %>";
$("#container").prepend(html);
});
_pretty_box.html.haml
.pretty_box_container
.title
Something Pretty
当渲染create.js.erb时,我得到以下内容:
$(function(){
var html = "<div class="pretty_box_container>
<div class="title">
Something Pretty
</div>
</div>";
$("#container").prepend(html);
});
正如您所料,这打破了我的javascript。我需要从渲染部分的结果中去除空白。问题是render
的返回值是ActiveSupport::SafeBuffer
对象,它会覆盖所有“不安全”方法(请参阅UNSAFE_STRING_METHODS),包括strip
。因此,调用render(:partial =>
pretty_box ).strip
对整个字符串进行HTML编码。
我使用方法html_safe
或to_s
尝试了各种组合。它们不起作用,因为它们返回self
,并且使用raw
无法正常工作,因为它会调用to_s.html.safe
。
我知道我可以将>
和<
字符附加到我的HAML中,但我不想为每个部分的每一行都添加这些字符。
答案 0 :(得分:8)
问题不是空格,而是引号。
$(function(){
var html = "<div class="pretty_box_container>
^
This is where you go wrong
试试这个:
$(function(){
var html = "<%= escape_javascript(render(:partial => 'pretty_box')) %>";
$("#container").prepend(html);
});
在StackOverflow上查看this answer,了解有关escape_javascript
。