【发布时间】:2014-09-12 08:57:20
【问题描述】:
如果我在 Rails 模板中有一行计算结果为 nil,有没有办法让 Haml 不用费心为该行生成输出而不是创建一个空标签?例如给出这个:
%h4= @my_hash[:optional]
...想象一下该哈希键没有数据。我不想结束:
<h4></h4>
我不希望该行有任何输出,因为空标签仍然会影响页面布局,特别是如果您使用的是像 Bootstrap 这样的 CSS-heavy。
我可以到处写这个:
-if @my_hash[:optional]
%h4= @my_hash[:optional]
但它冗长而丑陋。
(似乎很多人都想这样做,但我在 Haml 文档中找不到任何提及的方法,或者在 SO 或其他地方询问如何做到这一点的人。所以显然除了我之外,每个人都已经知道该怎么做了,对吧?)
更新:感谢您的建议。问题是,在这里等号后面放什么似乎并不重要:
%h4= amazing_intelligent_helper_method_but_sadly_too_late()
因为Haml已经决定在那个时候输出一个标签,唯一的问题是标签里有什么?如果等号后的表达式计算结果为 nil,Haml 不会在标签中放入任何内容 - 但它仍然会输出标签本身。
%h4= nil #output: <h4></h4>
%h4= '' #output: <h4></h4>
%h4= false #unexpected output: <h4>false</h4>
%h4= #Haml::SyntaxError 'There's no Ruby code for = to evaluate.'
所以目前,我没有一种省略空标签的单行方式。但肯定我不是唯一一个想要这样做的人吗?当您查看 Haml 支持的一些深奥选项时,我真的希望这个功能已经存在于某个地方。
【问题讨论】:
-
使用
-if是完全可以接受的。它不是冗长或丑陋的;相反,它相当于您在 Ruby 中直接使用尾随“if”执行的操作。
标签: ruby-on-rails ruby haml