在为嵌套字段处理一个简单的视图助手之后,我对使用html_safe感到困惑。
使用一个简单但无关紧要的例子来解释
#view helper
def add_link
html = render "message"
content_tag :a, "click me", 'data-html' => html
end
#message partial
<p class="blah" id="yo">hey how are you</p>
#js
$(document).ready ->
$('a').click ->
$(this).after($(this).data('html'))
#view
<%= add_link %>
在浏览器中,“click me”链接显示不正确,看起来像这样
嘿,你好吗? “&gt;点击我之所以如此,是因为链接data-html属性正在存储消息部分的内容,其中有一些“因此它搞乱了html标记。
好的,我们可以通过转义部分
的内容来修复它#view helper
def add_link
html = render "message"
content_tag :a, "click me", 'data-html' => CGI.escapeHTML(html)
end
现在链接正确呈现。
但是当我点击它时,遗憾的是附加的html被转义,所以在浏览器中它看起来像这样
click me <p class="this is it">hey how are you</p>
在抨击我的头后,我想到了什么是地狱,并尝试附加html_safe而不真正理解为什么它会起作用。
#view helper
def add_link
html = render "message"
content_tag :a, "click me", 'data-html' => CGI.escapeHTML(html).html_safe
end
并且低,看它在浏览器中工作
click me hey how are you
我理解为什么我必须首先将CGI.escape_html部分内容 - 以避免不匹配“。
但是为什么在版本2中,当我点击链接时附加的html作为文本出现?为什么调用html_safe会修复它?