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 

但是,正如您所看到的那样, >修饰符还会剥去链接前面的空格,从而删除单词和链接之间的空格。 我还没有想出一个漂亮的方法,除了添加&nbsp; 到“我会先”的结尾,像这样:

 I will first&nbsp; %a{:href => 'http://example.com'}> link somewhere - if @condition , then render this half of the sentence if a condition is met 

其中最终产生所需的输出没有很多难以阅读的插值:

 I will first&nbsp;<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 ,&#32; %a{:href=>'/page'} Next link 

这会产生你想要的东西:

 <a href='/home'>Anchor text</a>,&#32; <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"