在PHP中,我可以这样做:
<div class="foo <?php
if($a) echo "bar"; ?>
"><?php if ($b) echo "</div>"; ?>
非常方便。我可以在任何地方,任何引号之间,任何html符号之间,在任何我想要的地方打破字符串。
我需要在Ruby-html中实现相同的功能。我想将PHP项目移植到Ruby。我使用Slim模板语言。我尝试了这个,但它不起作用,Slim抛出错误:
<div class="foo
- if (x == 1)
= bar
"></div>
现在对于Slim,我只知道一种方式:
- if (a == true)
<div class="foo"></div>
- else
<div class="foo bar"></div>
首先,重复。其次,我的HTML-PHP部分代码非常复杂。它有两个循环(for
循环和foreach
循环)并且我使用多个这样的嵌入来根据条件添加div的属性。而且无法想象如何用Slim实现它。它甚至为此抛出一个错误,我无法打破长html字符串:
- if(i != 5)
<div class="foo bar"
id="item_#{i}"
style="background-color:red;"
data-im="baz">
</div>
- else
Slim是否允许在引号或元素属性之间使用条件if
来断开字符串?怎么做?
答案 0 :(得分:2)
如果你正在使用Rails,你可以通过这种方式自由地ActionView::Helpers
:
= content_tag :li, class: ( a == true ? "foo bar" : "foo") do
inside div
另外,您可以自由地创建一些辅助方法来为您提供这种逻辑
然而,在视图中包含许多逻辑被认为是不良做法。考虑使用一些Presenter pattern
修改。
调查一些slim docs发现你能够以这种方式实现目标
div.foo class="#{'bar' if a == true}"
| Text inside div