HAML - 如何在链接之间放置常规文本

Posted

技术标签:

【中文标题】HAML - 如何在链接之间放置常规文本【英文标题】:HAML - how to put regular text between links 【发布时间】:2012-04-20 16:10:13 【问题描述】:

我有一个包含如下链接的小 HAML 段落:

%p
  =link_to("My Disclosures", "#")
  =link_to("Create Disclosure", "#")
  =link_to("My Programs", "#") 
  =link_to("Log Out", "#")

我想要做的是像这样放置一个分隔符“|”链接之间,但我不知道如何。我尝试将它放在“”内的文本旁边,但它成为链接文本的一部分。当我尝试将分隔符放在行尾时,它没有显示出来。

知道如何让连字符在链接后仅呈现为文本吗?

谢谢!

【问题讨论】:

【参考方案1】:

您可以将字符串本身写在自己的行上:

%p
  =link_to("My Disclosures", "#")
  |
  =link_to("Create Disclosure", "#")
  |
  =link_to("My Programs", "#") 
  |
  =link_to("Log Out", "#")

或者,您可以将其附加到输出字符串:

%p
  =link_to("My Disclosures", "#") << '|'
  =link_to("Create Disclosure", "#") << '|'
  =link_to("My Programs", "#") << '|'
  =link_to("Log Out", "#")

【讨论】:

更喜欢 css 或辅助路由方法。随着时间的推移,开始有这种情况的视图会逐渐恶化,直到变成大杂烩。 我也是,@MichaelDurrant。我会接受jdoe's answer 而不是我自己的。【参考方案2】:

我遇到了同样的问题。我就是这样解决的:

1) 在 ApplicationHelper 模块中:

def links_bar(join_with = ' | ', &block)
  captureyield.split("\n").join(join_with).html_safe
end

2) 在任何视图中:

= links_bar do
  = link_to("My Disclosures", "#")
  = link_to("Create Disclosure", "#")
  = link_to("My Programs", "#") 
  = link_to("Log Out", "#")

生成:

<a href="#">My Disclosures</a> | <a href="#">Create Disclosure</a> | <a href="#">My Programs</a> | <a href="#">Log Out</a>

我疯了吗? ;)

感谢 Semyon Perepelitsa 的提示。

【讨论】:

我会将该方法放入像ApplicationHelper这样的辅助模块中,它与控制器没有任何关系。另外,我不明白block.binding.eval('self').captureyield 部分,capture(&amp;block) 应该可以工作。 我刚在一个布满灰尘的大盒子里找到它。我不记得我为什么把它放在那里但是)但我同意你的看法。我会改变我的答案。 block... 部分是必需的,因为 capture 助手在控制器中不可用。这就是我“获取”视图并将capture 应用到它的原因。 现在我明白了。如果你把它放在一个帮助器中,那么你不需要这样做,因为你已经在视图的上下文中了。 我想我知道我为什么把它放在那里了!我的测试应用程序中的提交名为view-context-in-controller。调用下一个提交:adding-validations-on-the-fly:控制器向模型添加验证。可怕的时刻) +1,我比我自己更喜欢这个答案,这是公认的答案。【参考方案3】:

在这种情况下,你做错了事。

获得你想要的效果的更正确的方法是使用一点 CSS:

ul.nav 
  list-style:none;
  margin:0;
  padding:0


ul.nav li 
  margin:0;
  padding:0 0.5em;
  border-right:1px solid black


ul.nav li.last 
  border-right:none;


%ul.nav
  %li=link_to("My Disclosures", "#")
  %li=link_to("Create Disclosure", "#")
  %li=link_to("My Programs", "#") 
  %li.last=link_to("Log Out", "#")

这样你就有了一个简单的、语义正确的、可访问的和搜索引擎友好的链接列表,它使用 CSS 的魔力转换为样式列表。

我知道我正在回答与您提出的问题不同的问题,但您应该知道解决此用例的“正确”方法。

【讨论】:

以上是关于HAML - 如何在链接之间放置常规文本的主要内容,如果未能解决你的问题,请参考以下文章

如何将链接应用到 HAML 中的多行文本字符串?

如何在 Sinatra 应用程序中链接 Sass 文件?

如何在 Rails 中使用 haml 制作图像链接标签?

如何在android中的开关按钮及其文本之间放置空格?

Haml 链接未呈现为链接

Android:如何放置弹出窗口的(提示)链接