如何将实例html_safe字符串变量传递给js.erb

时间:2016-05-24 15:55:04

标签: javascript ruby-on-rails-4 html-safe

这似乎是一个愚蠢的问题,但是没有办法实现这个目标

使用Rails 4.2.5。

远程调用控制器,

def update
  # ... save ...
  @notice="S'han trovat errors"
  # automatically renders update.js.erb
end

在update.js.erb

alert('<%=(@notice)%>');

这是输出: enter image description here

我尝试了什么:

1)在控制器中:

 @notice="S'han trovat errors".html_safe

2)另一个证明,在js.erb:

  alert('<%=raw(@notice)%>');

在这两种情况下,当执行javascript函数alert()时,它在浏览器控制台中都没有终端中的任何消息挂起?

3)我也尝试过:

alert('<%=escape_javascript(@notice)%>');

但是不起作用,显示“S'han trobat ......”

当然,如果我在index.html.erb @notice 中展示,结果是正确的(S'han trobat ..)

我不知道如何从控制器传递给js.erb,在字符串实例变量中显示一个“'”字符

由于

2 个答案:

答案 0 :(得分:0)

只需删除raw或尝试在不在控制器中的js文件中添加.html_safe。

其他解决方案是使用\'来逃避单引号,如

@ notice =“S \'han trovat errors”

答案 1 :(得分:0)

问题在于javascript重生:

alert('S'han trobat errors');

有3个&#39;

所以解决方案是放在控制器中:

@notice="S'han trobat errors".html_safe

和js.erb:

 alert("<%=(@notice)%>");

当然,我陷入了引号错误,

但我还有一个问题:为什么html.erb文件是自动转义的字符串,而且它们不在js.erb中?那么,如果我想在.html_safe中显示js.erb

,为什么需要将program Test11; {$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils, Winapi.Windows; begin try Writeln(DateTimeToStr(44167, TFormatSettings.Create(GetThreadLocale))); Writeln(DateTimeToStr(44167.00000001, TFormatSettings.Create(GetThreadLocale))); Readln; except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end. 放在字符串中