如果将代码拆分为两部分,则更容易理解。
第一部分是带有erb的javascript。这意味着 将被替换为其内部的 ruby 代码返回的任何内容。该替换的结果必须是有效的javascript,否则当客户端尝试处理它时,它将引发错误。所以这是第一件事:你需要有效的javascript。$("#reviews").append("<%= ... %>");
<%= ... %>
要考虑的另一件事是,Ruby生成的任何内容都必须包含在带有双引号的javascript字符串中 - 请注意.这意味着生成的 javascript 将如下所示:<%= ... %>
$("#reviews").append("...");
现在,让我们检查一下 .有什么作用?它正在呈现部分 - 这意味着它可以呈现任何类型的代码 - html,css ...甚至更多的javascript!<%= ... %>
render(:partial => @review)
那么,如果我们的部分包含一些简单的html,比如这个,会发生什么呢?
<a href="/mycontroller/myaction">Action!</a>
还记得你的javascript采用双引号字符串作为参数吗?如果我们简单地用该部分的代码替换,那么我们就有问题 - 紧接着有一个双引号!javascript 将无效:<%= ... %>
href=
// Without escaping, you get a broken javascript string at href
$("#reviews").append("<a href="/mycontroller/myaction">Action!</a>");
为了不发生这种情况,您希望转义这些特殊字符,以便您的字符串不会被剪切 - 您需要一些生成以下内容的东西:
<a href=\"/mycontroller/myaction\">Action!</a>
这是什么做的。它确保返回的字符串不会“破坏”javascript。如果使用它,您将获得所需的输出:escape_javascript
$("#reviews").append("<a href=\"/mycontroller/myaction\">Action!</a>")
问候!