栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么要在渲染局部之前进行scape_javascript?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么要在渲染局部之前进行scape_javascript?

如果将代码分为两部分,则更容易理解。

第一部分

$("#reviews").append("<%= ... %>")
;是带有erb的javascript。这意味着,
<%= ... %>
它将被内部返回的任何红宝石代码替换。替换的结果必须是有效的javascript,否则客户端尝试对其进行处理时将抛出错误。这就是第一件事:您需要有效的javascript。

要考虑的另一件事是,ruby生成的任何内容都必须包含在带有双引号的javascript字符串内-注意周围的双引号

<%= ... %>
。这意味着生成的javascript将如下所示:

$("#reviews").append("...");

现在,让我们检查中的红宝石部分

<%= ... %>
。怎么
render(:partial => @review)
办?它正在呈现部分内容-这意味着它可以呈现任何类型的代码-html,css …甚至更多的javascript!

那么,如果我们的partial包含一些简单的html(如此),会发生什么呢?

<a href="/mycontroller/myaction">Action!</a> 

还记得您的Javascript将双引号字符串作为参数吗?如果我们简单地用<%= … %>那个部分的代码替换,那么我们就会有一个问题-在href=双引号之后马上!javascript将无效:

// Without escaping, you get a broken javascript string at href$("#reviews").append("<a href="/mycontroller/myaction">Action!</a>");

为了避免这种情况的发生,您希望转义这些特殊字符,以便不对字符串进行剪切-您需要生成此字符的东西:

<a href="/mycontroller/myaction">Action!</a>

这是escape_javascript做什么的。它确保返回的字符串不会“破坏” javascript。如果使用它,将获得所需的输出:

$("#reviews").append("<a href="/mycontroller/myaction">Action!</a>")

问候!



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/408006.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号