这似乎是一个愚蠢的问题,但是没有办法实现这个目标
使用Rails 4.2.5。
远程调用控制器,
def update
# ... save ...
@notice="S'han trovat errors"
# automatically renders update.js.erb
end
在update.js.erb
中alert('<%=(@notice)%>');
我尝试了什么:
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,在字符串实例变量中显示一个“'”字符
由于
答案 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.
放在字符串中