Haml:控制文本周围的空白
在我的Rails模板中,我想用HAML来完成这个效果的最终的HTML:
I will first <a href="http://example.com">link somewhere</a>, then render this half of the sentence if a condition is met
接近的模板:
I will first = link_to 'link somewhere', 'http://example.com' - if @condition , then render this half of the sentence if a condition is met
但是,您可能会注意到这会在链接和逗号之间产生一个空格。 有没有什么实际的方法来避免这个空白? 我知道有语法来删除标签周围的空白,但是这种相同的语法可以应用于文本? 我真的不喜欢额外的标记来解决这个问题。
通过Haml的助手介绍了一个更好的方法:
环绕
= surround '(', ')' do %a{:href => "food"} chicken
生产:
(<a href='food'>chicken</a>)
成功 :
click = succeed '.' do %a{:href=>"thing"} here
生产:
click <a href='thing'>here</a>.
先于 :
= precede '*' do %span.small Not really
生产:
*<span class='small'>Not really</span>
回答原来的问题:
I will first = succeed ',' do = link_to 'link somewhere', 'http://example.com' - if @condition then render this half of the sentence if a condition is met
生产:
I will first <a href="http://example.com">link somewhere</a>, then render this half of the sentence if a condition is met
你也可以用Haml的“trim whitespace”修饰符来做到这一点。 在Haml声明之后插入>
将防止在其周围添加空格:
I will first %a{:href => 'http://example.com'}> link somewhere - if @condition , then render this half of the sentence if a condition is met
生产:
I will first<a href='http://example.com'>link somewhere</a>, then render this half of the sentence if a condition is met
但是,正如您所看到的那样, >
修饰符还会剥去链接前面的空格,从而删除单词和链接之间的空格。 我还没有想出一个漂亮的方法,除了添加
到“我会先”的结尾,像这样:
I will first %a{:href => 'http://example.com'}> link somewhere - if @condition , then render this half of the sentence if a condition is met
其中最终产生所需的输出没有很多难以阅读的插值:
I will first <span><a href="http://example.com">link somewhere</a></span>, then render this half of the sentence if a condition is met
好的,这是我正在解决的解决scheme:
帮手
def one_line(&block) haml_concat capture_haml(&block).gsub("\n", '').gsub('\\n', "\n") end
视图
I will first - one_line do = link_to 'link somewhere', 'http://example.com' - if @condition , then render this half of the sentence \\n if a condition is met
这样,默认情况下,空格被排除,但我仍然可以用“\ n”行明确地包含它。 (它需要双反斜线,否则HAML将其解释为一个真正的换行符。)让我知道是否有更好的select!
你可以使用HAML的'aligator语法'
空白删除:>和<
和<给你更多的控制标签附近的空白。 >将删除标签周围的所有空白,而<将立即删除标签内的所有空白。 你可以把它们想象成鳄鱼吃空白的东西:>面朝外,吃外面的空白,<面对标签吃里面的空白。 它们被放置在标签定义的末尾,类,id和属性声明之后,但是在/或=之前。
http://haml.info/docs/yardoc/file.REFERENCE.html#whitespace_removal__and_
一旦我采取了这样的事情是使用string插值:
I will first #{link_to 'Link somewhere'}#{', then render this half of the sentence if a condition is met' if condition}
我不喜欢插值中的文字string的外观,但我用它之前声明的string或dynamic生成的string之前。
你可以做到这一点,以保持领先的空间:
%a{:href => 'http://example.com'}>= ' link somewhere'
空间在引号中。
虽然没有很好的文档logging,但是使用HAML空白保存(>)和ASCII空间(&#32)结合,
%a{:href=>'/home'}> Home link ,  %a{:href=>'/page'} Next link
这会产生你想要的东西:
<a href='/home'>Anchor text</a>,  <a href='/page'>More text</a>
但是我同意,HAML需要提供一个更好的方法,因为它会在页面中添加不必要的ASCII字符(但它比使用助手更有效率)。
有尖括号“空白咀嚼”的语法,否则写一个帮手的方法。
我遇到了类似的问题,发现这个,所以我想我会张贴另一个解决scheme,不需要一个帮手的方法。 使用Ruby插值#{}来包装链接和if语句:
I will first #{link_to 'link somewhere', 'http://example.com'}#{if true : ", then render this half of the sentence if a condition is met" end}
这工作在3.0.18,它也可能在早期版本中工作。
我以前用过的另一个选项是:
- if @condition %span> , then some more text after the link.
你也可以一直这样做:
= link_to url_path do = ["part_1", "part_2"].join(", ")
我工作的解决scheme是:
I will first = link_to 'link somewhere', 'http://example.com' - if @condition = ", then render this half of the sentence if a condition is met"
您可以使用=
,虽然=
用于输出Rails代码的结果,但在这里它将服务于此目的。
保存function为我工作
.white-space-pre= preserve "TEXT"