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(&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 - 如何在链接之间放置常规文本的主要内容,如果未能解决你的问题,请参考以下文章