在js.erb内部渲染部分。是否有可能获得原始字符串,以便我可以剥离空白?

时间:2011-08-29 06:42:11

标签: ruby-on-rails-3 jquery haml renderpartial

我想在我的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_safeto_s尝试了各种组合。它们不起作用,因为它们返回self,并且使用raw无法正常工作,因为它会调用to_s.html.safe

我知道我可以将><字符附加到我的HAML中,但我不想为每个部分的每一行都添加这些字符。

1 个答案:

答案 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

的说明