格式化填充的文本区域、回车符、换行符和 HAML
Posted
技术标签:
【中文标题】格式化填充的文本区域、回车符、换行符和 HAML【英文标题】:Formatting populated textarea, carriage returns, newlines, and HAML 【发布时间】:2011-03-05 13:21:16 【问题描述】:当我使用 \r\n(回车 - 换行符)用文本填充 textarea 时,文本格式不正确 [更新:\r\n 是在填写 textarea 时生成的,我只是从数据库之前填写的内容。另外需要注意的是,在生产环境中我似乎没有这个问题。 END UPDATE] 例如:
%textarea
= "hello\r\nHow are you?"
出来是这样的:
hello
How are you?
我认为这可能与 HAML 有关。谁能帮我吗? 注意:如果我使用 \n\r 它工作正常,但这在技术上是不正确的,id 必须做一些 gsubs 来反转它们以正确显示。
【问题讨论】:
textarea 标签中是否有空格/回车符?例如。<textarea> foo </textarea>
.
是的,当我查看源代码时,第一部分和第二部分之间有一堆空格。
通常在字符串中您只需使用"\n"
换行即可。不行吗?
\r\n 正是有人用换行符填写文本区域时提交的内容。
【参考方案1】:
因为 Haml 会自动缩进 html 源代码,所以 pre 和 textarea 等对空格敏感的标签的内容可能会搞砸。解决方案是用 HTML 换行实体 &#x000A;
替换这些标记中的换行符,Haml 使用 Haml::Helpers#preserve
和 Haml::Helpers#find_and_preserve
帮助器来实现。
通常,当您使用需要它的标签时,Haml 会自动为您执行此操作(可以使用 :preserve
选项自定义)。例如,
%p
%textarea= "Foo\nBar"
将被编译为
<p>
<textarea>
Foo
Bar</textarea>
</p>
但是,如果助手正在生成标签,Haml 无法检测到,因此您必须自己致电 Haml::Helpers#find_and_preserve
。您也可以使用~
,它与=
相同,只是它在其输入上自动运行find_and_preserve
。例如:
%p= find_and_preserve "<textarea>Foo\nBar</textarea>"
与
相同%p~ "<textarea>Foo\nBar</textarea>"
并渲染
<p><textarea>Foo
Bar</textarea></p>
来源:this Haml FAQ。
【讨论】:
nex3,非常感谢! (我可以拥抱你吗?):D。.gsub("\n",'&#x000A;').html_safe
你也可以使用 Rails 的 text_area 助手:= find_and_preserve f.text_area :title
@thutt 的回答更胜一筹:使用~
,这是= find_and_preserve...
的别名,而不是=
【参考方案2】:
如果= f.text_area :foo
在每个换行符处显示不需要的空格,请简短回答:
将=
替换为~
有关其背后原因的更详细说明,请阅读Natalie's answer 和HAML docs about ~。
【讨论】:
【参考方案3】:继续@nex3 的回答,如果你想在文本区域内做一些多行内容,试试这样:
%textarea#textarea_id:name => 'area_name'
:preserve
Line1
Line2
Line3
Line4
Line5
【讨论】:
【参考方案4】:变化
%textarea
= "hello\r\nHow are you?"
到
%textarea "hello\r\nHow are you?"
一行似乎已经解决了这个问题。我想这意味着这是一个 HAML 问题。
【讨论】:
以上是关于格式化填充的文本区域、回车符、换行符和 HAML的主要内容,如果未能解决你的问题,请参考以下文章