在我的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
但是,您可能会注意到这会在链接和逗号之间产生一个空格。有没有实用的方法来避免这个空白?我知道有删除标签周围空格的语法,但这种语法是否只能应用于文本?我真的不喜欢额外标记的解决方案来实现这一点。
答案 0 :(得分:206)
通过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
答案 1 :(得分:39)
您也可以使用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
答案 2 :(得分:12)
好的,这是我正在解决的解决方案:
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会将其解释为实际换行符。)请告诉我是否有更好的选择!
答案 3 :(得分:6)
您可以使用&#39; aligator语法&#39; HAML
删除空白:&gt;和&lt;
和&lt;让您更好地控制标签附近的空白。 &GT;将删除标签周围的所有空格,而&lt;将立即删除标记内的所有空格。您可以将它们视为鳄鱼吃空白:&gt;面对标签并吃掉外面的空白,&lt;面对标签并吃掉内部的空白。它们放在标签定义的末尾,在类,id和属性声明之后,但在/或=之前。
http://haml.info/docs/yardoc/file.REFERENCE.html#whitespace_removal__and_
答案 4 :(得分:5)
一旦接近我就采用了这种方法就是使用字符串插值:
I will first #{link_to 'Link somewhere'}#{', then render this half of the sentence if a condition is met' if condition}
我不喜欢插值中文字字符串的外观,但我之前使用它与先前声明的字符串或动态生成的字符串。
答案 5 :(得分:5)
您可以这样做以保持领先空间:
%a{:href => 'http://example.com'}>= ' link somewhere'
空格在引号中。
答案 6 :(得分:3)
尽管没有详细记录,但使用HAML空白保留(&gt;)和ASCII空间(&amp;#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字符(但它仍然比使用帮助器更有效)。
答案 7 :(得分:1)
有尖括号“whitespace munching”语法,否则为它编写辅助方法。
答案 8 :(得分:1)
我遇到了类似的问题并发现了这个,所以我想我会发布另一个不需要辅助方法的解决方案。使用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,它也可以在早期版本中使用。
答案 9 :(得分:1)
我过去使用过的另一种选择:
- if @condition
%span> , then some more text after the link.
答案 10 :(得分:0)
您也可以随时:
= link_to url_path do
= ["part_1", "part_2"].join(", ")
答案 11 :(得分:0)
我工作的解决方案是:
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代码的结果,但在这里它将用于服务目的。
答案 12 :(得分:0)
preserve功能对我有用
public bool IsInBetween(DateTime target, DateTime start, DateTime end)
{
return start <= target && target <= end;
}